在HarmonyOS开发中ArkTs和C++实时通信?

在HarmonyOS开发中ArkTs和C++实时通信?C++层执行过程会产生大量的日志,目前是直接输出在控制台,现在想实时输出到ArkTs的UI上,是要写一个回调吗?对NAPI不熟悉,看文档没有找到合适的方法。有什么建议吗?

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

阅读 581
1 个回答

是的,需要通过回调的方式实现,你可以参考以下示例代码实现 的需求:
1、在index.d.ts中链接ArkTS侧函数与C++侧函数:

export const nativeCallArkTS: (cb: (a: string) => string) => string; 

2、在C++测调用ArkTS侧函数:

static napi_value NativeCallArkTS(napi_env env, napi_callback_info info) { 
  size_t argc = 1; 
  // 声明参数数组 
  napi_value args[1] = {nullptr}; 
  ​ 
  // 获取传入的参数并依次放入参数数组中 
  napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 
  ​ 
  // 创建一个string,作为ArkTS的入参 
  napi_value argv = nullptr; 
  napi_create_string_utf8(env, "yes", 3, &argv); 
 
  ​ 
  // 调用传入的callback,并将其结果返回 
  napi_value result = nullptr; 
  napi_call_function(env, nullptr, args[0], 1, &argv, &result); 
  return result; 
}

3、将NativeCallArkTS接口导出:

EXTERN_C_START 
static napi_value Init(napi_env env, napi_value exports) 
{ 
  napi_property_descriptor desc[] = { 
  {"nativeCallArkTS", nullptr, NativeCallArkTS, nullptr, nullptr, nullptr, napi_default, nullptr} 
}; 
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 
return exports; 
} 
EXTERN_C_END

4、在ArkTS中调用函数:

import nativeFun from 'libentry.so'; 
​ 
@Entry 
@Component 
struct Index { 
  @State message: string = 'nativeCallArkTS'; 
  ​ 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .onClick(() => { 
            this.message += nativeFun.nativeCallArkTS((a: string)=> { 
              return a }) 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题