napi_get_typedarray_info接口可以获取TypedArray的哪些属性,如何获取?

阅读 609
1 个回答

napi_get_typedarray_info接口可以获取TypedArray的类型、长度、字节偏移量和ArrayBuffer等属性。在C++代码中,获取ArkTS侧传入的TypedArray和属性类型参数,调用该接口获取属性信息,根据不同属性类型返回相应的属性值。示例代码如下:

#include "napi/native_api.h"

static napi_value GetTypedarrayInfo(napi_env env, napi_callback_info info) {
    size_t argc = 2;
    napi_value args[2] = {nullptr};
    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
    int32_t infoTypeParam;
    napi_get_value_int32(env, args[1], &infoTypeParam);
    enum InfoType { INFO_TYPE = 1, INFO_LENGTH, INFO_ARRAY_BUFFER, INFO_BYTE_OFFSET };
    void *data;
    napi_typedarray_type type;
    size_t byteOffset, length;
    napi_value arraybuffer;
    napi_get_typedarray_info(env, args[0], &type, &length, &data, &arraybuffer, &byteOffset);
    napi_value result;
    switch (infoTypeParam) {
        case INFO_TYPE:
            napi_value int8_type;
            napi_get_boolean(env, type == napi_int8_array, &int8_type);
            result = int8_type;
            break;
        case INFO_LENGTH:
            napi_value napiLength;
            napi_create_int32(env, length, &napiLength);
            result = napiLength;
            break;
        case INFO_ARRAY_BUFFER:
            napi_value napiByteOffset;
            napi_create_int32(env, byteOffset, &napiByteOffset);
            result = napiByteOffset;
            break;
        case INFO_BYTE_OFFSET:
            result = arraybuffer;
            break;
        default:
            break;
    }
    return result;
}

ArkTS侧创建TypedArray后,传入该数组和属性类型枚举值调用该接口获取属性,如let int8Array = new Int8Array([15, 7]); enum InfoType { TYPE = 1, LENGTH = 2, ARRAY_BUFFER = 3, BYTE_OFFSET = 4 }; let arrbuff = testNapi.getTypedarrayInfo(int8Array, InfoType.ARRAY_BUFFER) as ArrayBuffer;

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

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