如何使用napi_create_external_arraybuffer接口创建外部ArrayBuffer?

阅读 597
1 个回答

在C++代码中,先定义一个包含数据指针和长度的结构体,创建一个数组并分配内存,然后创建结构体实例并填充数据信息,接着调用napi_create_external_arraybuffer接口创建外部ArrayBuffer对象,关联数组数据并指定释放资源的回调函数,最后可根据需求进一步创建TypedArray等对象进行操作(如示例中创建Int8Array类型的Array对象)。示例代码如下:

#include "napi/native_api.h"

typedef struct {
    uint8_t *data;
    size_t length;
} BufferData;

void FinalizeCallback(napi_env env, void *finalize_data, void *finalize_hint) {
    BufferData *bufferData = static_cast<BufferData *>(finalize_data);
    delete[] bufferData->data;
    delete bufferData;
}

napi_value CreateExternalArraybuffer(napi_env env, napi_callback_info info) {
    uint8_t *dataArray = new uint8_t[5]{1, 2, 3, 4, 5};
    napi_value externalBuffer = nullptr;
    BufferData *bufferData = new BufferData{dataArray, 5};
    napi_status status = napi_create_external_arraybuffer(env, dataArray, 5, FinalizeCallback, bufferData, &externalBuffer);
    if (status!= napi_ok) {
        napi_throw_error(env, nullptr, "Node-API napi_create_external_arraybuffer fail");
        return nullptr;
    }
    napi_value outputArray;
    status = napi_create_typedarray(env, napi_int8_array, 5, externalBuffer, 0, &outputArray);
    if (status!= napi_ok) {
        napi_throw_error(env, nullptr, "Node-API napi_create_typedarray fail");
        return nullptr;
    }
    return outputArray;
}

ArkTS侧调用该接口并通过日志输出创建的外部ArrayBuffer相关信息(如JSON.stringify(testNapi.createExternalArraybuffer()))。

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题