HarmonyOS C++调TS函数的时候怎么传byte数组参数过去
这是我现在的方式:现在能正确的调用,但是无法ts侧无法使用传过来的数组,提示为数组长度为undefined
ts侧:
function sendData(uiContext: UIContext, data: Uint8Array): void {
  // TODO:知识点:使用对应UIAbility的UIContext.runScopedTask来执行方法,确保多实例情况下,事件在正确的窗口/UIAbility内发生
  uiContext.runScopedTask(() => {
    bleManager.sendData(data)
  })
}
c++侧:
void EtsWrapper::TSFn::CallJSSendData(napi_env env, napi_value jscb, void *context, void *data) {
  napi_status status;
  DataPackage *param = (DataPackage *)data;
  uint16_t length = param->length;
  const char *dataToSend = param->data;
  char *dataPtr = nullptr;
  napi_value dataCovered = nullptr;
  napi_create_buffer(g_uniContext->pickerEnv, length, reinterpret_cast<void **>(&dataPtr), &dataCovered);
  napi_create_buffer_copy(g_uniContext->pickerEnv, length, dataToSend, reinterpret_cast<void **>(&dataPtr),
    &dataCovered);
  auto it = g_uniContext->uiContextMap.find(g_uniContext->topAbilityID);
  if (it == g_uniContext->uiContextMap.end()) {
    OH_LOG_ERROR(LOG_APP, "key error: %{public}s", g_uniContext->topAbilityID.c_str());
    delete param;
    return;
  }
  napi_value uiContext = FNS::ParseNapiRef(env, it->second);
  napi_value argv[] = {uiContext, dataCovered};
  status = napi_call_function(env, nullptr, jscb, 2, argv, nullptr);
  if (status != napi_ok) {
    OH_LOG_ERROR(LOG_APP, "call select failed");
  }
  delete param;
  { // NOTE:仅用于用返回值的场景,当jscb有返回值时,上面napi_call_function之后,即可获得其返回值,然后可将其返回值设置到全局
    // 并notify等待返回值的线程
    std::lock_guard<std::mutex> guard(g_uniContext->resultWaitUtil.lock);
    g_uniContext->resultWaitUtil.isFinished = true;
    g_uniContext->resultWaitUtil.cv.notify_all();
  }
}
        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS 基于Navigation的路由管理如何跳转单例页面传递参数过去 
1118浏览  • 1回复 待解决
ts给c++传递数组,c++层如何解析 
3188浏览  • 1回复 待解决
HarmonyOS 网络请求传参直接传Byte数组是否支持 
1107浏览  • 1回复 待解决
如何为 C++ 提供回调函数? 
3878浏览  • 1回复 待解决
HarmonyOS popToIndex多级的时候,怎么传参数 
1175浏览  • 1回复 待解决
HarmonyOS C++反序列化拿到了ts对象后怎么调对象方法 
954浏览  • 1回复 待解决
在C++回调时,如何阻塞TS主线程? 
1867浏览  • 1回复 待解决
HarmonyOS 函数方法 多个参数的时候 如何可以选择性传参 
925浏览  • 1回复 待解决
如何实现ArkTS与C/C++的数组转换 
2314浏览  • 1回复 待解决
有没有从ts设置回调到c++层,然后c++再回调到ts的示例代码? 
2105浏览  • 1回复 待解决
PreviewInfo url参数可以传数组吗 
532浏览  • 0回复 待解决
HarmonyOS C/C++库开发 C侧和TS之间的数据交互 
2409浏览  • 1回复 待解决
HarmonyOS C++函数插桩功能 
980浏览  • 1回复 待解决
ArkTS调用C++类中的成员函数 
2807浏览  • 1回复 待解决
HarmonyOS native层C++子线程中回调函数中调用ArkTS层中定义的类的public成员函数 
1461浏览  • 1回复 待解决
HarmonyOS  BuilderNode在build时,子@Builder函数不能传改变的参数,只能用build函数的参数 
1404浏览  • 1回复 待解决
HarmonyOS ArkTS如何调C++的api,或C++如何调用ArkTS的api 
1510浏览  • 1回复 待解决
HarmonyOS C++线程调用回调函数返回arkUI时,可以将ArkTS代码的回调处理跑在C++线程吗 
924浏览  • 1回复 待解决
ArkTS如何把string转为byte数组 
4486浏览  • 1回复 待解决
HarmonyOS ts中继承的类,怎么和C++中的类对象进行绑定 
1051浏览  • 1回复 待解决
HarmonyOS 用Navigation打开页面,页面返回的时候,怎么拿到回传参数? 
1422浏览  • 0回复 待解决
HarmonyOS 用Navigation打开页面,页面返回的时候,怎么拿到回传参数。 
2770浏览  • 1回复 待解决
HarmonyOS 如何在ArkTS中向C++层注册回调,C++层如何调用回调方法? 
2506浏览  • 1回复 待解决
HarmonyOS ets层传递Array<string>到C++层,C++层如何获取数组内容 
1401浏览  • 1回复 待解决





















建议使用napi_create_arraybuffer,可以参考: