nw 调用C++ 插件(.node/.so/.dll)

公司一个项目是使用node-webkit(现在的nw.js) 开发的桌面应用,主要是通过 nw.js 调用.node(通过C++编写的node插件) 文件,.node 文件调用本地驱动的模式,然后通过js加载node文件达到调用调用硬件驱动的方式。但是由于前期同事开发的时候选用的node-webkit版本较低,针对早起的node-webkit版本会存在应用奔溃的现象(nw.exe 停止工作),应用的每一次奔溃会导致正在执行的业务出现中断的情况,对于客户来说体验感很差。查阅了相关资料显示针对应用奔溃的想象node-webkit在0.10.5版本后的到了相对稳定的修复。后面公司为了解决这个问题决定使用稳定版本的node-webkit(下面统一为nw.js),但是由于nw.js调用的node插件需要在编译的时候制定nwjs的运行版本,所以在替换高版本的nwjs的时候会导致原来的node插件不能使用,nwjs的错误提示如下。

NodeJS - Error: The specified procedure could not be found

所以如果使用高版本或是使用不同于原来使用版本的nwjs就会出现node插件不能使用的情况。为了解决这个问题,公司决定重写一遍node插件,后面进过查阅相关资料发现可以直接使用node-ffi 模块编译原生的DLL文件。后面过官网的一步步查询终于跑通了官网的案例。
由于是初次使用nwjs以及调用插件的相关模块所以踩了不少坑,进过了一个星期的尝试终于把所有的问题的解决的。由于在搭建环境过程中花了太多的经历而且目前在网上搜索到的案例都不是很详细,所以希望正给正在挣扎的同志们一点小小的帮助。

1.首先你的系统里面必须安装了 nodejs
2. 根据官网提示安装node-gyp(npm install -g node-gyp)
3. 安装windows-build-tools运行环境 (npm install –global –production windows-build-tools)

注意:默认执行‘npm install –global –production windows-build-tools’时系统会自动安装 VC++运行环境,系统会先下载 Python并自动安装,安装好自后会自动下载‘VC++ build tools’并安装,但是自动安装‘VC++ build tools’的前提是当前操作系统以及安装好 ‘.NetFramwork 4.5.1+’以上版本系统才会自动安装,如果没有安装,npm不会自动安装 ‘buildtools’
4. 根据官网提示新建你需要编译的.cc文件,以及binding.gyp文件以,在对于的根目录执行node-gyp configure,执行成功后,成功后系统会在当前目录生成一个‘build’文件夹。
5. 在当前文件夹执行‘node-gyp build’ 成功后会在build 文件夹下面的 release 文件夹下面生成对于的 addon.node 文件
6. 完成以上步骤说明 ‘node-gyp’ 环境搭建成功。

  • 参考链接

  • 安装node-gyp成功后你就可以安装ffi模块,在你需要调用的dll文件目录 执行 npm install ffi

  • 安装ffi成功后进入node_modules 目录下重新编译一下ref模块以及ffi模块,注意 这里需要安装nw-gyp模块(npm install nw-gyp -g),该模块的作用于node-gyp模块相似,只不过一个编译的是node运行环境一个编译的是nwjs运行环境。
  • 安装好nw-gyp后分别进入ref、ffi模块执行nw-gyp rebuild –target=v0.10.5 –arch=ia32,其中–target是你制定的nwjs运行版本替换为你需要的版本号即可,arch是你需要运行的操作系统版本,如果是64位操作系统使用–arch=x64,注意 本实列运行在Windows系统下。
  • 编译成功后你就可以将编译后的模块直接调用即可。

以上说明均为本人亲测,由于是初次使用恳请各位批评指正,如果你有相关模糊不清的地方请留言说明,我会第一时间回复你。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值