HarmonyOS 鸿蒙Next napi开发时,C层向外传递ArrayBuffer或者TypedArray时数据为空 ?
HarmonyOS 鸿蒙Next napi开发时,C层向外传递ArrayBuffer或者TypedArray时数据为空 ?
在JS到C的调用方法 napi_value native_generateECDHKey(napi_env env, napi_callback_info info)中:
//napi层方法
static napi_value Test(napi_env env, napi_callback_info info)
{
char buf[10] = {0};
for (int i = 0; i< 10; i++){
buf[i] = ‘0’ + i;
}
napi_value ret;
napi_value array;
napi_create_arraybuffer(env, 10, (void **)&buf, &array);
napi_create_typedarray(env, napi_uint8_array, 10, array, 0, &ret);
return ret;
}
export const test: () => Uint8Array;
//ts层调用
.onClick(() => {
let ret = testNapi.test()
if (ret != undefined && ret != null){
ret.forEach((value: number, index: number)=>{
console.log("ret " + value)
})
}
})
在HarmonyOS鸿蒙Next napi开发中,当C层尝试向外传递ArrayBuffer或TypedArray时数据为空的问题,通常涉及到底层内存管理和数据封装的复杂性。以下是一些可能的原因及检查点:
-
内存分配与释放:确保在C层正确分配了内存,并且在传递过程中没有发生内存泄露或提前释放。检查所有相关的malloc/free调用,确保它们成对出现且逻辑正确。
-
数据拷贝:在将数据从C层传递到napi层时,确保进行了正确的数据拷贝。如果仅传递了指针而没有实际复制数据,那么在JavaScript层访问时可能会遇到空数据或内存访问错误。
-
类型匹配:检查ArrayBuffer或TypedArray的类型是否与C层传递的数据类型匹配。例如,如果C层传递的是float数组,而JavaScript层期望的是Uint8Array,则会导致数据解析错误。
-
napi接口使用:确保使用了正确的napi接口来创建和传递ArrayBuffer或TypedArray。检查napi_create_arraybuffer、napi_create_typedarray等函数的使用是否正确。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。