Node调用C++(dll)

最近开始搞毕设了,打算用自己拿手的js来搞,但是仿佛入坑了,Node还不是很熟。总之,兵来将挡,水来土掩嘛,带着问题学习才是最高效的。


折腾1:Node 调用 C++

刚开始,虽然我老师把dll文件给我了,但是我一直以为是用Node调用C++,然后一直在折腾怎么编写addon,怎么将C++编译然后用Node调用,未果。。。T_T,还差点在*上提问了。。

中途遇到个传参的问题,还搜了好多资料,解决方案:v8 string to char*

但是,再怎么说,也折腾过了,对照着《深入浅出Node.js》中的模块部分,还是理解了不少的。要想走得更远,前面的路是少不了的。

好哒,把步骤写一下吧:

1. 需要 node-gyp 模块

$ npm install node-gyp -g

2. 安装 python 环境

官网

注意: 根据 node-gyp 的GitHub显示,请务必保证你的 python 版本介于 2.5.0 和 3.0.0 之间。

3. 写文件

  • binding.gyp
  • test.cc
  • test.js

具体内容请参考 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. 入门例子

Node.js调用C/C++

Hello World例子--官网

6. 参考

Nodejs 6.x 中文文档

Node.js v7.2.1 Documentation

Node.js 和 C++ 之间的类型转换

Javascript里有个C:Part 1 - 基础

折腾2:Node 调用 dll

突然惊觉在 C++ 里调用的是动态链接库dll里面的函数,原来努力方向错了,而且并不需要那么复杂,编译之类的,用VS最恶心的是还得配置各种库,如 boost,我还真是够有耐心的。。。

因此,Google搜索:nodejs调用dll

☛ 步骤如下:

  1. 首先参考 Node 调用 C++ 中的环境配置,安装 node-gyp 及 Python 环境

     $ npm install node-gyp -g

    安装 python 环境:官网

    注意: 根据 node-gyp 的GitHub显示,请务必保证你的 python 版本介于 2.5.0 和 3.0.0 之间。

  2. 安装 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文件)

nodejs调用dll/so文件的方法

然后又折腾了会,要不就是传参错了,或者路径错了,总之,这些都是小事儿啦,最后,终于成功了!!Node效率果然高!

上一篇:windows设置笔记


下一篇:Android项目实战(五):TextView自适应大小