最近开始搞毕设了,打算用本身拿手的js来搞,可是仿佛入坑了,Node还不是很熟。总之,兵来将挡,水来土掩嘛,带着问题学习才是最高效的。html
刚开始,虽然我老师把dll文件给我了,可是我一直觉得是用Node调用C++,而后一直在折腾怎么编写addon,怎么将C++编译而后用Node调用,未果。。。T_T,还差点在stackoverflow上提问了。。node
中途遇到个传参的问题,还搜了好多资料,解决方案:v8 string to char*python
可是,再怎么说,也折腾过了,对照着《深刻浅出Node.js》中的模块部分,仍是理解了很多的。要想走得更远,前面的路是少不了的。git
好哒,把步骤写一下吧:web
1. 须要 node-gyp
模块npm
$ npm install node-gyp -g
2. 安装 python
环境api
官网函数
注意: 根据 node-gyp 的GitHub显示,请务必保证你的 python 版本介于 2.5.0 和 3.0.0 之间。学习
3. 写文件ui
具体内容请参考 Node.js调用C/C++
注意:网上搜集的有些博文时间有些久,node 的写法在变,比较老的写法可能会报错,因此,最好去看官网上的例子,如 Hello World例子--官网
4. 编译
$ node-gyp configure $ node-gyp build
node-gyp configure
命令生成适用于当前平台的构建文件,同时会在 build 目录下生成一个适用于 UNIX 平台的 Makefile 或者适用于 Windows 平台的 vcxproj 文件。调用
node-gyp build
命令会在 build/Release/ 目录下编译生成 addon.node 文件。
5. 运行
$ node test.js
6. 入门例子
6. 参考
忽然惊觉在 C++ 里调用的是动态连接库dll里面的函数,原来努力方向错了,并且并不须要那么复杂,编译之类的,用VS最恶心的是还得配置各类库,如 boost,我还真是够有耐心的。。。
所以,Google搜索:nodejs调用dll
☛ 步骤以下:
首先参考 Node 调用 C++ 中的环境配置,安装 node-gyp 及 Python 环境
$ npm install node-gyp -g
安装 python
环境:官网
注意: 根据 node-gyp 的GitHub显示,请务必保证你的 python 版本介于 2.5.0 和 3.0.0 之间。
安装 node-ffi
$ npm install ffi
☛ 实践:
由于个人 dll 文件只暴露了一个 Query 方法,因此个人 query.js 文件以下:
// query.js var ffi = require('ffi'); var libm = new ffi.Library(__dirname + '/imagesearcherdll', { 'Query': [ 'string', ['string', 'string'] // 方法名:["返回值类型",["参数1类型","参数2类型"]] ] }); var sketchPath = './public/img/tmp.png', outputFile = 'result.txt'; libm.Query(sketchPath, outputFile);
最后,执行 node query.js
便可运行。
➹ 参考以下:
经过ffi在node.js中调用动态连接库(.so/.dll文件)
而后又折腾了会,要不就是传参错了,或者路径错了,总之,这些都是小事儿啦,最后,终于成功了!!Node效率果真高!