HarmonyOS 鸿蒙Next 在napi_init.cpp中调用C代码怎么接收返回的参数

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 在napi_init.cpp中调用C代码怎么接收返回的参数 ArkTS调用Native napi_init.cpp中间层定义了一个函数调用了C函数ZJ_GetOneReqId() 这个函数返回一个int 我用napi_value接收是有问题的,无法找到这个C函数

以下两种方式都试过了,都不行!

接收返回参数方式1
int puiReqId = ZJ_GetOneReqId();

接收返回参数方式2
int puiReqId;
napi_create_int32(env, ZJ_GetOneReqId(), &puiReqId)

2 回复

cpp的返回值就是index.d.ts的返回值,在cpp内部做了转换。

ArkTS代码
<Button(this.msg1).backgroundColor(Color.Red).fontColor(Color.White)
           .fontSize(15).borderRadius(10).width(150).height(30).onClick(()=>{
              this.msg1 = testNapi.artsCallNative(10,20).toString();
         })

index.d.ts暴露的接口
export const artsCallNative: (a: number, b: number) => number;

cpp代码
static napi_value ArtsCallNative(napi_env env, napi_callback_info info) {
    size_t argc = 2;
    // define args
    napi_value args[2] = {nullptr};
    // 获取参数 并依次放入参数数组中
    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
    // 读取的到的参数
    // 依次获取参数
    double value0;
    napi_get_value_double(env, args[0], &value0);
    double value1;
    napi_get_value_double(env, args[1], &value1);

    // 返回两个参数的和
    napi_value sum;
    napi_create_double(env, value0 + value1, &sum);
    return sum;
}

更多关于HarmonyOS 鸿蒙Next 在napi_init.cpp中调用C代码怎么接收返回的参数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,如果你在napi_init.cpp中调用C代码并需要接收返回的参数,通常你可以通过以下方式实现:

  1. 定义C函数并返回所需参数: 在C代码中,定义一个函数,该函数接收必要的输入参数,并返回你需要的输出参数。确保C函数的返回类型与你要接收的数据类型相匹配。

  2. 在C++代码中声明并调用C函数: 在napi_init.cpp中,使用extern "C"来声明C函数,这样可以避免C++编译器对函数名进行修饰。然后,直接调用该C函数,并将返回的参数存储在适当的变量中。

  3. 处理返回的参数: 根据C函数的返回类型,在C++代码中处理返回的参数。如果返回的是结构体或指针,确保在C++代码中正确地解析和使用这些数据。

示例代码结构:

// napi_init.cpp
extern "C" {
    #include "your_c_header.h"  // 包含C函数声明的头文件
}

// 调用C函数并接收返回参数
int result = your_c_function(input_param);
// 处理返回的参数
// ...

请确保C函数和C++代码之间的数据类型兼容,以避免数据不一致的问题。

如果问题依旧没法解决请联系官网客服,官网地址是

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!