HarmonyOS ArkTs和C++实时通信

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

HarmonyOS
5h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

是的,需要通过回调的方式实现,你可以参考以下示例代码实现 的需求:<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%') 
  } 
}
分享
微博
QQ
微信
回复
22分钟前
相关问题
ArkTSC++之间的交互
1230浏览 • 1回复 待解决
HarmonyOS ArkTSC/C++的交互
535浏览 • 1回复 待解决
需要提供c++到js通信demo
543浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS的对象
2100浏览 • 1回复 待解决
c/c++层主动调用ArkTS存在问题
281浏览 • 1回复 待解决
C++ 如何获取操作 Arkts 实例
828浏览 • 1回复 待解决
HarmonyOS h5ArkTS通信
130浏览 • 1回复 待解决
C++调用ArkTS 定义的方法
1782浏览 • 1回复 待解决
ArkTSC++互相直接调用
1899浏览 • 1回复 待解决
如何实现ArkTSC/C++的数组转换
557浏览 • 1回复 待解决
如何实现ArkTSC/C++的HashMap转换?
992浏览 • 0回复 待解决
HarmonyOS ArkTSC++ 偶现方法找不到。
413浏览 • 1回复 待解决
如何实现ArkTSC/C++的对象传递
508浏览 • 1回复 待解决
ArkTS/js怎样与C++进行交互?
109浏览 • 1回复 待解决
C++同步调ArkTS里面的方法
972浏览 • 1回复 待解决
ArkTS对象绑定的C++对象如何回收?
805浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了0人