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

HarmonyOS
2天前
浏览
收藏 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;
}

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;
}
分享
微博
QQ
微信
回复
2天前
相关问题
ts给c++传递数组,c++如何解析
1929浏览 • 1回复 待解决
如何实现ArkTS与C/C++的对象传递
670浏览 • 1回复 待解决
如何修改C++版本?C++支持情况?
1160浏览 • 1回复 待解决
HarmonyOS 如何调用标准C++
465浏览 • 1回复 待解决
如何C/C++ 创建ArkTS的对象
2224浏览 • 1回复 待解决
自定义弹窗中的变量如何传递给页面
2719浏览 • 1回复 待解决
HarmonyOS ArkTS与C/C++的交互
752浏览 • 1回复 待解决
HarmonyOS C++异步操作
366浏览 • 1回复 待解决