有没有从ts设置回调到c++层 然后c++再回调到ts的HarmonyOS鸿蒙Next示例代码

有没有从ts设置回调到c++层 然后c++再回调到ts的HarmonyOS鸿蒙Next示例代码 有没有从ts设置回调到c++层 然后c++再回调到ts的示例代码

2 回复

可以直接通过napi_get_cb_info在napi层拿到你传的这个callback,然后通过napi_call_function就回调到你传过来的callback 不需要通过函数指针的方式

更多关于有没有从ts设置回调到c++层 然后c++再回调到ts的HarmonyOS鸿蒙Next示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,可以通过NAPI(Native API)实现从TypeScript(TS)层设置回调到C++层,然后再从C++层回调到TS层的功能。以下是一个简单的示例代码:

TS层代码:

import native from '@ohos.native';

// 定义C++层的回调函数
native.registerCallback((data: string) => {
  console.log("C++层回调到TS层的数据:", data);
});

// 调用C++层的函数,设置回调
native.setCallbackToCpp();

C++层代码:

#include <hilog/log.h>
#include <napi/native_api.h>
#include <uv.h>

// 定义TS层的回调函数
napi_value CallbackFromCpp(napi_env env, napi_callback_info info) {
    napi_value result;
    napi_create_string_utf8(env, "Hello from C++", NAPI_AUTO_LENGTH, &result);
    return result;
}

// 设置回调到C++层的函数
napi_value SetCallbackToCpp(napi_env env, napi_callback_info info) {
    napi_value jsCallback;
    size_t argc = 1;
    napi_value argv[1];
    napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);

    if (argc < 1) {
        napi_throw_error(env, nullptr, "Expected at least one argument");
        return nullptr;
    }

    napi_create_reference(env, argv[0], 1, &jsCallback);

    // 模拟C++层处理完成后回调到TS层
    napi_value global;
    napi_get_global(env, &global);
    napi_value callbackResult;
    napi_call_function(env, global, jsCallback, 0, nullptr, &callbackResult);

    return nullptr;
}

// 注册C++层的函数
napi_value Init(napi_env env, napi_value exports) {
    napi_property_descriptor desc[] = {
        {"setCallbackToCpp", nullptr, SetCallbackToCpp, nullptr, nullptr, nullptr, napi_default, nullptr},
        {"callbackFromCpp", nullptr, CallbackFromCpp, nullptr, nullptr, nullptr, napi_default, nullptr}
    };
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}

NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

这个示例展示了如何在鸿蒙Next中通过NAPI实现TS与C++之间的回调。TS层通过native.setCallbackToCpp()调用C++层的函数,C++层在完成处理后通过napi_call_function回调到TS层。

回到顶部