HarmonyOS 前端采集 arraybuffer 如何传递给 c++ 用以编码?

HarmonyOS
2024-12-20 14:53:20
840浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Heiang

JS和C++相互调用ArrayBuffer

Native侧接受传入的 ArkTS Array

static napi_value TS2NAPI(napi_env env, napi_callback_info info)
{
  // 获取TS层传来的参数
  size_t argc = 1;
  napi_value args;
  napi_get_cb_info(env, info, &argc, &args, NULL, NULL);
  napi_value input_array = args;

  // 获取传入数组typedarray生成input_buffer
  napi_typedarray_type type;// 数据类型
  napi_value input_buffer;
  size_t byte_offset;//数据偏移
  size_t i, length;//数据字节大小
  napi_get_typedarray_info(env, input_array, &type, &length, NULL, &input_buffer, &byte_offset);

  // 获取数组数据z
  void *data;
  size_t byte_length;
  napi_get_arraybuffer_info(env, input_buffer, &data, &byte_length);

  if (type == napi_int32_array) {
    int32_t *data_bytes = (int32_t *)(data);
    for (i = 0; i < length/sizeof(int32_t); i++) {
      OH_LOG_INFO(LOG_APP, "TS2NAPI: C++  %{public}d", *((int32_t *)(data_bytes) + i));
    }
  }

  return NULL;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

TS侧 接收 Native侧返回的Array

// NAPI层 array 传到TS层
static napi_value NAPI2TS(napi_env env, napi_callback_info info)
{
  // 数据个数
  int num = 10;
  // 创建output_buffer
  napi_value output_buffer;
  void *output_ptr = NULL;
  napi_create_arraybuffer(env, num * sizeof(int32_t), &output_ptr, &output_buffer);

  // output_array
  napi_value output_array;
  napi_create_typedarray(env, napi_int32_array, num, output_buffer, 0, &output_array);

  // 给output_ptr、output_buffer赋值
  int32_t * output_bytes = (int32_t *)output_ptr;
  for (int32_t i = 0; i < num; i++) {
  output_bytes[i] = i;
}

  for (int32_t i = 0; i < num; i++) {
  OH_LOG_INFO(LOG_APP, "NAPI2TS: C++  %{public}d", *((int32_t *)(output_ptr) + i));
}

  return output_array;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
分享
微博
QQ
微信
回复
2024-12-20 17:04:55


相关问题
ts给c++传递数组,c++如何解析
2825浏览 • 1回复 待解决
如何实现ArkTS与C/C++的对象传递
1771浏览 • 1回复 待解决
HarmonyOS native C++传递buffer 到ArkTS 层
1180浏览 • 1回复 待解决
如何修改C++版本?C++支持情况?
2257浏览 • 1回复 待解决
自定义弹窗中的变量如何传递给页面
3602浏览 • 1回复 待解决
HarmonyOS 如何调用标准C++
1285浏览 • 1回复 待解决
如何C/C++ 创建ArkTS的对象
3508浏览 • 1回复 待解决
HarmonyOS C++开发
981浏览 • 1回复 待解决
HarmonyOS C++跨平台
918浏览 • 1回复 待解决
如何实现ArkTS与C/C++的数组转换
1829浏览 • 1回复 待解决