当前位置: 首页 > news >正文

electron node-api addon开发

解决方案入口

拷贝日志以及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].As<Napi::Number>();string p2 = info[1].As<Napi::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].As<Napi::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

http://www.lryc.cn/news/511559.html

相关文章:

  • 如何在嵌入式系统或计算机系统中验证boot程序
  • scala基础学习_运算符
  • 【ANGULAR网站开发】初始环境搭建
  • 【Java】面试题 并发安全 (2)
  • springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
  • React 组件的通信方式
  • WAV文件双轨PCM格式详细说明及C语言解析示例
  • 【ES6复习笔记】数值扩展(16)
  • 百度热力图数据日期如何选择
  • Vue.js 高级组件开发:设计模式与实践
  • 《一文读懂卷积网络CNN:原理、模型与应用全解析》
  • MONI后台管理系统-数据敏感字段存储加密
  • 熟悉各类游戏设计模式的用途与限制,如 factory、strategy、mvc、object pool 等
  • 【RabbitMQ高级篇】消息可靠性问题(1)
  • ASP.NET |日常开发中常见问题归纳讲解
  • 【【深入浅出TinyRisc-v】】
  • 常见的限流算法
  • 【Leetcode 每日一题】3159. 查询数组中元素的出现位置
  • xadmin后台首页增加一个导入数据按钮
  • 行为树详解(5)——事件驱动
  • 3.若依前端项目拉取、部署、访问
  • Debian操作系统相对于Ubuntu有什么优势吗?
  • 【漏洞复现】CVE-2015-3337 Arbitrary File Reading
  • win10、win11-鼠标右键还原、暂停更新
  • FFmpeg来从HTTP拉取流并实时推流到RTMP服务器
  • Quo Vadis, Anomaly Detection? LLMs and VLMs in the Spotlight 论文阅读
  • Rust : tokio中select!
  • 【hackmyvm】hacked靶机wp
  • MaixBit k210学习记录
  • Wordperss漏洞 DeDeCMS漏洞