鸿蒙(HarmonyOS)实战开发篇——跨语言的复杂参数类型通报 ...

东湖之滨  论坛元老 | 2025-2-21 10:13:35 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1023|帖子 1023|积分 3073

往期知识点整理



  • 鸿蒙(HarmonyOS)北向开发知识点记录~
  • 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
  • 被裁员后,踏上了鸿蒙开发求职之路
  • 记录一场鸿蒙开发岗位口试经历~
  • 持续更新中……
场景说明:

我们经常在ArkTS与C++之间相互通报参数,那么具体该怎样传呢?下面先容了几个常用的场景:
场景一:string类型通报

调用接口:
napi_get_value_string_utf8
实现能力:
通过 napi_get_value_string_utf8 获取字符串长度,然后根据长度将从 ArkTS 侧传过来的 napi_value 转换成字符串。
留意:
C++里字符串末端是\0,所以转换成字符串时长度为stringSize + 1。
焦点代码解释
Index.ets文件向C++层通报string数据。
  1. let str:string = 'hello!';
  2. testNapi.putString(str);
复制代码
将value转成字符串返回,留意C++里字符串末端是\0,所以转换成字符串时长度为stringSize + 1。
  1. static std::string value2String(napi_env env, napi_value value) {
  2.     size_t stringSize = 0;
  3.     napi_get_value_string_utf8(env, value, nullptr, 0, &stringSize); // 获取字符串长度
  4.     std::string valueString;
  5.     valueString.resize(stringSize + 1);
  6.     napi_get_value_string_utf8(env, value, &valueString[0], stringSize + 1, &stringSize); // 根据长度传换成字符串
  7.     return valueString;
  8. }
复制代码
C++层获取string数据。
  1. static napi_value ts_putString(napi_env env, napi_callback_info info){
  2.     size_t argc = 1;
  3.     napi_value args[1] = {nullptr};
  4.     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
  5.     napi_value str = args[0];//args[0]->string
  6.     std::string stringValue = value2String(env, str);//将 str 转换成 string 类型
  7.     OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, LOG_TAG, "ts_putString str = %{public}s", stringValue.c_str());
  8.     return nullptr;
  9. }
复制代码
实现结果

场景二:arraybuffer类型的通报

调用接口:


  • ArkTS通报给C++,分析ArrayBuffer
    napi_get_typedarray_info、napi_get_arraybuffer_info

  • C++通报给ArkTS,构建ArrayBuffer
    napi_create_arraybuffer、napi_create_typedarray
实现能力:
实现了 ArkTS 与 Native C++ 之间相互通报 arraybuffer。
Native C++ 侧接受传入的 ArkTS Array,通过 napi_get_typedarray_info 将获取到的数据传入数组 typedarray 天生 input_buffer ,然后通过 napi_get_arraybuffer_info 获取数组数据。
ArkTS 侧 接收 Native C++ 侧返回的 Array,通过 napi_create_arraybuffer 创建一个 arraybuffer 数组,根据创建的 arraybuffer 通过 napi_c

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表