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的路由管理如何跳转单例页面传递参数过去
17浏览 • 1回复 待解决
ts给c++传递数组,c++层如何解析
1948浏览 • 1回复 待解决
如何为 C++ 提供回调函数?
2476浏览 • 1回复 待解决
HarmonyOS 网络请求传参直接传Byte数组是否支持
60浏览 • 1回复 待解决
HarmonyOS popToIndex多级的时候,怎么传参数
28浏览 • 1回复 待解决
在C++回调时,如何阻塞TS主线程?
528浏览 • 1回复 待解决
有没有从ts设置回调到c++层,然后c++再回调到ts的示例代码?
1059浏览 • 1回复 待解决
HarmonyOS 函数方法 多个参数的时候 如何可以选择性传参
17浏览 • 1回复 待解决
如何实现ArkTS与C/C++的数组转换
784浏览 • 1回复 待解决
HarmonyOS C/C++库开发 C侧和TS之间的数据交互
663浏览 • 1回复 待解决
HarmonyOS C++函数插桩功能
39浏览 • 1回复 待解决
HarmonyOS ArkTS如何调C++的api,或C++如何调用ArkTS的api
55浏览 • 1回复 待解决
ArkTS调用C++类中的成员函数
1347浏览 • 1回复 待解决
HarmonyOS ts中继承的类,怎么和C++中的类对象进行绑定
40浏览 • 1回复 待解决
HarmonyOS native层C++子线程中回调函数中调用ArkTS层中定义的类的public成员函数
104浏览 • 1回复 待解决
HarmonyOS ets层传递Array<string>到C++层,C++层如何获取数组内容
89浏览 • 1回复 待解决
HarmonyOS 用Navigation打开页面,页面返回的时候,怎么拿到回传参数?
229浏览 • 0回复 待解决
HarmonyOS 用Navigation打开页面,页面返回的时候,怎么拿到回传参数。
145浏览 • 1回复 待解决
HarmonyOS 如何在ArkTS中向C++层注册回调,C++层如何调用回调方法?
235浏览 • 1回复 待解决
如何将js传的map转成c++的对象
759浏览 • 1回复 待解决
HarmonyOS 项目使用c++库导出函数报错
336浏览 • 1回复 待解决
c++侧可以直接调用ts的static方法吗?
2191浏览 • 1回复 待解决
HarmonyOS 本地文件如何转为byte数组
30浏览 • 1回复 待解决
ArkTS如何把string转为byte数组
3057浏览 • 1回复 待解决
建议使用napi_create_arraybuffer,可以参考: