• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/setter53     * 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}