HarmonyOS ets层传递Array<string>到C++层,C++层如何获取数组内容

function preConnectStreams(num: number, urls: Array<string>): number;

C++
napi_value PreConnectStreams(napi_env env, napi_callback_info info) {
  napi_value result;
  size_t argc = 2;
  napi_value args[2] = {nullptr};

  napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
  if (argc != 2) {
    HILOGI("param count(%{public}zu) check fail.", argc);
    napi_create_int32(env, Cronet_RESULT_ILLEGAL_ARGUMENT, &result);
    return result;
  }
  int num;
  napi_get_value_int32(env, args[1], &num);

  //todo 这里的数组应该如何获取呢
}
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple
static napi_value arraytest(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);

  bool isArray = false;
  napi_is_array(env, args[0], &isArray);

  uint32_t length = 0;
  // 获取数组的长度
  napi_get_array_length(env, args[0], &length);
  OH_LOG_Print(LOG_APP, LOG_WARN, LOG_DOMAIN, "testTag", "args array length = %{public}d", length);

  napi_value ret;
  napi_create_array(env, &ret);
  int param = 0;
  for (int i = 0; i < length; i++) {
  napi_value value;
  napi_get_element(env, args[0], i, &value);
  //napi_get_value_int32(env, value, &param);
  size_t stringszise = 0;

  napi_get_value_string_utf8(env, value, nullptr, 0 , &stringszise);
  std::string valueString;
  valueString.resize(stringszise+1);
  napi_get_value_string_utf8(env, value, &valueString[0], stringszise+1, &stringszise);
  OH_LOG_INFO(LOG_APP,"%{public}s",valueString.c_str());
  //OH_LOG_Print(LOG_APP, LOG_WARN, LOG_DOMAIN, "testTag", "index = %{public}d, param = %{public}d", i, param);
  napi_value sum;
  napi_create_int32(env, param + param, &sum);
  napi_set_element(env, ret, i, sum);
}

  return ret;
}
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
  napi_property_descriptor desc[] = {
  { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "arraytest", nullptr, arraytest, nullptr, nullptr, nullptr, napi_default, nullptr }
};
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
return exports;
}

export const arraytest: (a: string[]) => Array<string>;

testNapi.arraytest(["1","2","3"])
分享
微博
QQ
微信
回复
1天前
相关问题
ts给c++传递数组c++如何解析
1902浏览 • 1回复 待解决
HarmonyOSC++触发通知ArkTS
43浏览 • 1回复 待解决
ArkTS通过接口访问C++对象
370浏览 • 1回复 待解决
c/c++主动调用ArkTS存在问题
359浏览 • 1回复 待解决
HarmonyOS C++自定义组件如何开发?
322浏览 • 1回复 待解决
通过Native 调用c++实现文本绘制
1027浏览 • 1回复 待解决
如何实现ArkTS与C/C++数组转换
747浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了0人