HarmonyOS 鸿蒙Next napi开发时,C层向外传递ArrayBuffer或者TypedArray时数据为空 ?

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next napi开发时,C层向外传递ArrayBuffer或者TypedArray时数据为空 ?

HarmonyOS 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; 

//index.d.ts 

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) 

    }) 

  } 

})

1 回复

在HarmonyOS鸿蒙Next napi开发中,当C层尝试向外传递ArrayBuffer或TypedArray时数据为空的问题,通常涉及到底层内存管理和数据封装的复杂性。以下是一些可能的原因及检查点:

  1. 内存分配与释放:确保在C层正确分配了内存,并且在传递过程中没有发生内存泄露或提前释放。检查所有相关的malloc/free调用,确保它们成对出现且逻辑正确。

  2. 数据拷贝:在将数据从C层传递到napi层时,确保进行了正确的数据拷贝。如果仅传递了指针而没有实际复制数据,那么在JavaScript层访问时可能会遇到空数据或内存访问错误。

  3. 类型匹配:检查ArrayBuffer或TypedArray的类型是否与C层传递的数据类型匹配。例如,如果C层传递的是float数组,而JavaScript层期望的是Uint8Array,则会导致数据解析错误。

  4. napi接口使用:确保使用了正确的napi接口来创建和传递ArrayBuffer或TypedArray。检查napi_create_arraybuffer、napi_create_typedarray等函数的使用是否正确。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部