HarmonyOS 鸿蒙Next NDK开发 C++的回调函数事件如何回调或者通知到ArkTS层

HarmonyOS 鸿蒙Next NDK开发 C++的回调函数事件如何回调或者通知到ArkTS层

static void SDKMsgDataCallback( char *pcBuffer, long lMsgID, long lExternID, long lBufSize, long dwUser ){
    if (lMsgID == ONLINE_MSG) {
        /// 如何回调到ArkTS层???
        //  CallEvent2ArkTS
        //  napi_call_function
    }
}

在C++层设置了一个回调函数,如何才能将回调事件返回到ArkTS层,以便ArkTS层做出相应处理?

更多关于HarmonyOS 鸿蒙Next NDK开发 C++的回调函数事件如何回调或者通知到ArkTS层的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以通过缓存的env,callback对象,调用napi_call_function方法将数据传回给arkts层,比如:

void SRRtcRoomCallBackNapi::onRoomJoinConfirm(RResult rResult, const RRoomInfo &roomInfo) {
    // 转换N-API对象
    napi_value roomInfo_napi = SRGlobalvar::convertToSRRoomInfo(SRGlobalvar::napi_CallbackReference->env, roomInfo);
    napi_value rResult_napi = SRGlobalvar::convertToSRResult(SRGlobalvar::napi_CallbackReference->env, rResult);
    // 传递给TS
    napi_value callback;
    napi_get_reference_value(SRGlobalvar::napi_CallbackReference->env,
                             SRGlobalvar::napi_CallbackReference->roomCallBack_napi, &callback);
    napi_value jsMethod;
    napi_get_named_property(SRGlobalvar::napi_CallbackReference->env, callback, "onRoomJoinConfirm", &jsMethod);
    napi_value argv[] = {rResult_napi, roomInfo_napi};
    napi_value callbackResult = nullptr;
    napi_call_function(SRGlobalvar::napi_CallbackReference->env, nullptr, jsMethod, 2, argv, &callbackResult);
}

注:主线程的env,存储起来,没有问题,也能够在后续的调用中使用,但是,不能跨线程使用,跨线程使用会崩溃。其他线程的env不要缓存,如taskpool创建的线程在线程运行结束后,就会销毁,此时,存储的env不能再使用,使用会崩溃。

更多关于HarmonyOS 鸿蒙Next NDK开发 C++的回调函数事件如何回调或者通知到ArkTS层的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next NDK开发中,若需将C++的回调函数事件回调或通知到ArkTS层,通常需通过跨语言通信机制实现。具体步骤如下:

  1. 定义回调接口:在C++代码中定义回调接口,并在需要回调的地方调用该接口。确保接口具有明确的参数和返回类型,便于ArkTS层接收和处理。

  2. 跨语言绑定:利用鸿蒙提供的跨语言通信机制(如JNI或特定于鸿蒙的跨语言桥接技术),将C++回调接口与ArkTS层对应的方法绑定。此过程可能涉及在ArkTS层定义与C++接口相匹配的函数,并通过特定注解或配置进行绑定。

  3. 事件触发与传递:在C++代码中的适当位置触发回调,并将事件数据通过绑定机制传递给ArkTS层。确保数据在传递过程中保持完整性和正确性。

  4. ArkTS层处理:在ArkTS层接收并处理从C++传递过来的回调事件。根据事件类型和数据执行相应的逻辑操作。

请注意,上述步骤为一般性描述,具体实现可能因鸿蒙版本、项目结构和需求差异而有所不同。开发者需参考鸿蒙官方文档和示例代码,确保跨语言通信机制的正确实现。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部