gpt4 book ai didi

javascript - NAPI 插件 : how to return value to javascript from c++ CALLBACK?

转载 作者:行者123 更新时间:2023-12-02 21:30:46 37 4
gpt4 key购买 nike

我的项目有一些功能需要其他SDK,并且这个SDK方法的一些返回值是在c++ CALLBACK中返回的。

如何从 C++ CALLBACK 将值返回给 javascript?

像这样的简单代码:

C++代码

    // login callback
void CALLBACK LoginResultCallBack(LONG lUserID)
{
// ??? return lUserID to javascript ???
}

// async login
napi_value Login(napi_env env, napi_callback_info info) {
// ...
LOGIN_INFO struLoginInfo = { 0 };
DEVICEINFO struDeviceInfoV40 = { 0 };
// set login callback
struLoginInfo.cbLoginResult = LoginResultCallBack;
SDK_Login(&struLoginInfo, &struDeviceInfoV40);

return 0;
}

napi_value Init(napi_env env, napi_value exports) {
napi_property_descriptor des= { "login", NULL, Login, NULL, NULL, NULL, napi_default, NULL };
assert(napi_define_properties(env, exports, 1, &des) == napi_ok);
return exports;
}

NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)


js代码

sdk.login((userId) => {
// ??? get userId from c++ CALLBACK ???
});

最佳答案

我认为这就是您正在寻找的答案:

napi_value RunCallback(napi_env env, const napi_callback_info info) {
napi_status status;

size_t argc = 1;
napi_value args[1];
status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
assert(status == napi_ok);

napi_value cb = args[0];

napi_value argv[1];
status = napi_create_string_utf8(env, "hello world", NAPI_AUTO_LENGTH, argv);
assert(status == napi_ok);

napi_value global;
status = napi_get_global(env, &global);
assert(status == napi_ok);

napi_value result;
status = napi_call_function(env, global, cb, 1, argv, &result);
assert(status == napi_ok);

return nullptr;
}

直接来自node-addon-examples并且可能还有其他有用的示例。

关于javascript - NAPI 插件 : how to return value to javascript from c++ CALLBACK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60631356/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com