您的位置:首页 > Web前端 > Node.js

Node调用C++(dll)

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

折腾1:Node 调用 C++

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

中途遇到个传参的问题,还搜了好多资料,解决方案: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

☛ 步骤如下:

首先参考 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文件)

nodejs调用dll/so文件的方法

然后又折腾了会,要不就是传参错了,或者路径错了,总之,这些都是小事儿啦,最后,终于成功了!!Node效率果然高!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: