深圳网站公司好,能打开任何网站浏览器,怎么设计海报图片,wordpress 头像 virtos解决方案入口
拷贝日志以及json等第三方源码 增加包含目录
编写接口
默认模板已经有一个回调函数了 照葫芦画瓢就行 其中几个重要的点要注意
1.参数传入
比如如下的例子#xff1a; 头文件定义#xff1a; public:下增加
Napi::Value StartAnswer (const Napi::Callb…解决方案入口
拷贝日志以及json等第三方源码 增加包含目录
编写接口
默认模板已经有一个回调函数了 照葫芦画瓢就行 其中几个重要的点要注意
1.参数传入
比如如下的例子 头文件定义 public:下增加
Napi::Value StartAnswer (const Napi::CallbackInfo);在VcansNodeApi::GetClass 中定义注册函数。
VNodeApi::InstanceMethod(StartAnswer , VNodeApi::StartAnswer ),编写NAPI函数, 这里面的VNodeApi::DeviceCallBackNotify是定义的静态回调函数指针。一开始不用关注这个。 info[0].AsNapi::Number();这个就是指针取值的方式。
Napi::Value VNodeApi::StartAnswer(const Napi::CallbackInfo info)
{spdlog::info({} :: Function Enter., __FUNCTION__);Napi::Env env info.Env();bool bret true;int p1 info[0].AsNapi::Number();string p2 info[1].AsNapi::String().Utf8Value();HRET ret m_ans_question-StartAnswer(p1, p2, VNodeApi::DeviceCallBackNotify);if (HR_OK ! ret) {spdlog::error({} :: StartAnswer ret 0x{:08x}., __FUNCTION__, ret);bret false;}isAnsing true;spdlog::info({} :: Function Leave., __FUNCTION__);return Napi::Boolean::New(env, bret);
}2.参数传出
直接return 一个Napi的对象就行。
return Napi::Boolean::New(env, bret);
return Napi::String::New(env, str_res);3.函数指针传入作为回调
这是一个函数指针回调的方式外部通过这个注册函数将函数指针传入。将函数指针创建为一个线程安全的napi线程回调函数对象。赋值给一个全局的或者类静态变量以供后续静态函数回调访问。
Napi::ThreadSafeFunction threadSafeCallback;
Napi::Value VNodeApi::SetCallBack(const Napi::CallbackInfo info)
{Napi::Env env info.Env();if (info.Length() 1) {throw Napi::Error::New(env, Missing argument);}if (!info[0].IsFunction()) {throw Napi::TypeError::New(env, Wrong argument type);}Napi::Function napiFunction info[0].AsNapi::Function();threadSafeCallback Napi::ThreadSafeFunction::New(env, napiFunction, Callback, 0, 1);return Napi::String::New(env, Done);
}4.调用js函数
函数指针创建为全局线程安全后就可以直接使用了。这时候不分线程内线程外等逻辑。都可以直接调用。调用方式如下 其中注意如下的内容 回调传入的参数是在匿名函数中定义的所以要与外部SetCallback传入的函数参数格式以及类型一致。
std::string msg hello node-api;
// callback param
auto callback [msg](Napi::Env env, Napi::Function jsCallback) {
Napi::String napiMessageString Napi::String::New(env, msg);
jsCallback.Call({ napiMessageString });
}
threadSafeCallback.NonBlockingCall(callback);编译
可以直接使用npm install 进行触发重新编译会解析binding.gyp之后进行重新生成makefile npm install