有没有从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层。