HarmonyOS ArkTs和C++实时通信?

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

阅读 577
1 个回答

是的,需要通过回调的方式实现,你可以参考以下示例代码实现 的需求:<br\>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%')
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进