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