鸿蒙NDK开发技巧之-----HAP包如何引入HSP包后,如何给HSP的包传递上下文
在一个NDK 项目的创建以后会有你看napi_init.cpp 文件中会默认创建这个方法:
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports) {
napi_property_descriptor desc[] = {
{“add”, nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr},}
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
setHspEnv(env);
return exports;
}
其中napi_env env, 就是他的上下文,napi_env 是一个核心参数,用于表示 Node.js 环境的句柄。它是与 JavaScript 运行时交互的桥梁,用于创建、操作和访问 JavaScript 对象,以及处理异常、内存管理等。
那么在hsp 包中很多的方法也需要这个,怎么从Hap 包里面进行传递呢?
可以在hsp 的头文件中定义一个宏定义和传值的方法例如:
在hsp_napi.h 文件中写入
#ifndef CROSSMODULEREFERENCE_NAPI_HSP_H
#define CROSSMODULEREFERENCE_NAPI_HSP_H
#include <js_native_api_types.h>
#include
napi_env main_env;
void setHspEnv(napi_env env);
#endif //CROSSMODULEREFERENCE_NAPI_HSP_H
在hsp_napi.cpp 源文件中实现:
void setHspEnv(napi_env env) {
main_env = env;
}
那么在源文件其他的方法中使用的时候就使用 main_env 这个宏定义就可以