1#include "napi/native_api.h" 2#include <hilog/log.h> 3#include <string> 4[include_replace] 5 6EXTERN_C_START 7 8/*[NAPI_GEN]:Init函数被定义用来初始化模块(比如设置导出的函数或对象)*/ 9static napi_value Init(napi_env env, napi_value exports) 10{ 11 /* [NAPI_GEN]:napi_property_descriptor是Node.js中N-API的一个结构体,它用来描述一个对象的属性,这包括数据属性和访问器 12 * 属性(通常是getter和setter函数), 这个结构体包含了以下字段 13 * utf8name: 属性的名称,以 null 结尾的 UTF-8 字符串。 14 * name: 可选,代替 utf8name 的 napi_value 类型的名称。这允许使用预先存在的 napi_value,可能是一个字符串或符号。 15 * method: 如果这个属性是一个函数,这里会是一个指向原生函数的指针。 16 * getter: 如果这个属性有一个 getter 函数,这里会是一个指向该 getter 原生函数的指针。 17 * setter: 如果这个属性有一个 setter 函数,这里会是一个指向该 setter 原生函数的指针。 18 * value: 如果这个属性是一个数据属性,这里会是一个 napi_value 表示属性的值。 19 * attributes: 属性的描述符,指定属性是否可写(napi_writable)、可枚举(napi_enumerable)、可配置(napi_configurable)等。 20 * data: 一个指针,指向与属性相关联的任何原生数据。这通常用于存储与 getter 和 setter 相关联的上下文信息。 21 */ 22 napi_property_descriptor desc[] = { 23[init_replace] 24 }; 25 26 /* [NAPI_GEN]:napi_define_properties 是一个N-API函数,它允许原生模块在 JavaScript 对象上定义新的属性。允许一次性定义多个属性。 27 * 这个函数是在原生代码中定义对象形状的关键工具,可以用来向对象添加属性,包括数据属性和访问器属性(getter/setter) 28 * env: N-API 环境句柄,代表当前的运行环境。 29 * object: 一个 napi_value,指向你想要定义属性的对象。 30 * property_count: 属性描述符数组中的元素数量,告知函数有多少个属性需要定义。 31 * properties: 指向 napi_property_descriptor 结构体数组的指针,每个结构体描述了一个要定义的属性。 32 */ 33 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 34 return exports; 35} 36EXTERN_C_END 37static napi_module demoModule = { 38 .nm_version = 1, 39 .nm_flags = 0, 40 .nm_filename = nullptr, 41 .nm_register_func = Init, /*[NAPI_GEN]:将初始化函数Init与模块关联起来*/ 42 .nm_modname = "entry", 43 .nm_priv = ((void*)0), 44 .reserved = { 0 }, 45}; 46 47extern "C" __attribute__((constructor)) void RegisterEntryModule(void) 48{ 49 /*[NAPI_GEN]:napi_module_register 宏被用来静态注册模块初始化函数,使得Node.js在加载模块时调用它。*/ 50 napi_module_register(&demoModule); 51}