在NAPI篇【2】中讲解了cpp目录中各文件的作用,默认生成的hello.cpp源代码文件中,包含NAPI函数编写、定义与注册,本篇以分析hello.cpp的Add函数用来讲解一下NAPI函数的编写。
首先,明确一个概念,NAPI的目的是提供了JS与C/C++不同语言模块之间的相互访问(主要是数据的传递),但是JS与C/C++是不同语言,无法直接进行数据传递,需要进行数据类型转化,这需要一座桥梁。
一、NAPI数据类型
OpenHarmony NAPI 将 ECMAScript 标准中定义的 Boolean、Null、Undefined、Number、BigInt、String、Symbol和 Object 这八种数据类型以及函数对应的 Function 类型统一封装成了napi_value 类型,是 JS 数据类型和 C/C++ 数据类型之间的桥梁。
napi_value 表示 JS 值的不透明指针,在 C/C++ 端要使用 JS 端传递的数据类型,都是通过 NAPI 提供的相关方法把napi_value转换成 C/C++ 类型后再使用,同理当需要把 C/C++的数据传递给 JS 应用层也要通过 NAPI 提供的方法把 C/C++ 端的数据转换成 napi_value 再向上传递
常用的C/C++与napi_value数据类型的转换。
1、C/C++转napi_value
(1)int类型转换
NAPI_EXTERN napi_status napi_create_int32(napi_env env,
int32_t value,
napi_value* result);
NAPI_EXTERN napi_status napi_create_uint32(napi_env env,
uint32_t value,
napi_value* result);
NAPI_EXTERN napi_status napi_create_int64(napi_env env,
int64_t value,
napi_value* result);
说明:
env:方法调用者的运行环境,包含 JS 引擎等。
value:C/C++端的 int 类型的值。
result:napi_value,返回给 JS 应用层的数据。
以下同理。