代码解析 napi_value NapiMac::CreateMac(napi_env env, napi_callback_info info) { size_t expectedArgc = ARGS_SIZE_ONE; size_t argc = expectedArgc; napi_value argv[ARGS_SIZE_ONE] = { nullptr }; napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); if (argc != expectedArgc) { LOGE("The input args num is invalid."); return nullptr; } std::string algoName; if (!GetStringFromJSParams(env, argv[PARAM0], algoName)) { LOGE("Failed to get algorithm."); return nullptr; } HcfMac *macObj = nullptr; HcfResult res = HcfMacCreate(algoName.c_str(), &macObj); if (res != HCF_SUCCESS) { napi_throw(env, GenerateBusinessError(env, res, "create C obj failed.")); LOGE("create c macObj failed."); return nullptr; } napi_value napiAlgName = nullptr; napi_create_string_utf8(env, algoName.c_str(), NAPI_AUTO_LENGTH, &napiAlgName); napi_value instance = nullptr; napi_value constructor = nullptr; napi_get_reference_value(env, classRef_, &constructor); napi_new_instance(env, constructor, argc, argv, &instance); napi_set_named_property(env, instance, CRYPTO_TAG_ALG_NAME.c_str(), napiAlgName); NapiMac *macNapiObj = new (std::nothrow) NapiMac(macObj); if (macNapiObj == nullptr) { LOGE("create napi obj failed"); return nullptr; } napi_wrap( env, instance, macNapiObj, [](napi_env env, void *data, void *hint) { NapiMac *mac = static_cast<NapiMac *>(data); delete mac; return; }, nullptr, nullptr); return instance; }
时间: 2024-04-27 15:25:23 浏览: 125
napi.rar_V2 _linux napi
这段代码是一个 C++ 的 N-API 模块,用于创建一个 Mac 对象的实例。它接收两个参数,一个是 N-API 的环境变量 env,另一个是一个包含回调函数信息的回调信息对象 info。
首先,它定义了一个常量 expectedArgc,表示参数数量,和一个变量 argc,表示实际参数数量。然后定义了一个数组 argv,用于存储参数值。
接下来,通过 napi_get_cb_info 函数获取参数信息,并检查参数数量是否正确。如果不正确,则返回空指针。
然后,从参数中获取算法名称,并调用 HcfMacCreate 函数创建一个 HcfMac 对象,如果创建失败,则抛出异常并返回空指针。
接着,创建一个 N-API 字符串类型的变量 napiAlgName,将算法名称转换成 N-API 字符串,并将其设置为 instance 对象的属性。
接下来,创建一个 NapiMac 对象,并将其包装在 instance 对象中。如果创建 NapiMac 对象失败,则返回空指针。
最后,返回 instance 对象。
阅读全文