HarmonyOS 鸿蒙Next Native如何通过napi获取ArrayBuffer
HarmonyOS 鸿蒙Next Native如何通过napi获取ArrayBuffer 需要从JS层读取rawfile转换成arraybuffer,然后传到native,应该用napi的哪个方法获取到arraybuffer呢?
尝试使用过napi_get_arraybuffer_info,得到的data是个空值,请问大佬怎么搞?
5 回复
//cpp端
napi_value GetArray(napi_env env, napi_callback_info info) {
napi_status status;
size_t requireArgc = 1;
size_t argc = 1;
napi_value args[1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
// 确保传入的参数是数组
napi_valuetype valuetype;
status = napi_typeof(env, args[0], &valuetype);
if (status != napi_ok) {
napi_throw_error(env, NULL, "Failed to get typeof value");
return nullptr;
}
if (valuetype != napi_object) {
napi_throw_type_error(env, NULL, "Expected an array");
return nullptr;
}
napi_value buff = args[0];
status = napi_typeof(env, buff, &valuetype);
bool isArrayBuff = 0;
if (valuetype == napi_object) {
status = napi_is_typedarray(env, buff, &isArrayBuff);
}
char *buff_data = nullptr;
size_t byte_length = 0;
char *pszBuf = nullptr;
//获取长度与元素
napi_typedarray_type typedarray_type;
napi_value array;
size_t offset;
napi_get_typedarray_info(env, buff, &typedarray_type, &byte_length, (void **)&buff_data, &array, &offset);
pszBuf = new char [byte_length + 1];
for (int i = 0; i < byte_length; ++i) {
pszBuf[i] = buff_data[i];
}
napi_value jsRet;
napi_create_int32(env, 0, &jsRet);
return jsRet;
}
//index.d.ts 类型定义
export const getArray: (byContent:Uint8Array) => number;
//js调用端:
Button("测试 数组传递")
.margin({top:5})
.width('80%')
.onClick( () => {
let contents:Uint8Array = new StringUtils().stringToUint8Array("12345678中文在这hello12345678")
sho.getArray(contents)
})
更多关于HarmonyOS 鸿蒙Next Native如何通过napi获取ArrayBuffer的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我读到也是空的,demo里面没有
很喜歡HarmonyOS的卡片式設計,信息一目了然,操作也更便捷。
您好,napi的使用参考demo:
[https://gitee.com/openharmony/arkui_napi/tree/master/sample](https://gitee.com/openharmony/arkui_napi/tree/master/sample)