Node调用C++(dll)
2016-12-22 09:51
423 查看
最近开始搞毕设了,打算用自己拿手的js来搞,但是仿佛入坑了,Node还不是很熟。总之,兵来将挡,水来土掩嘛,带着问题学习才是最高效的。
中途遇到个传参的问题,还搜了好多资料,解决方案:v8 string to char*
但是,再怎么说,也折腾过了,对照着《深入浅出Node.js》中的模块部分,还是理解了不少的。要想走得更远,前面的路是少不了的。
好哒,把步骤写一下吧:
1. 需要
2. 安装
官网
注意: 根据 node-gyp 的GitHub显示,请务必保证你的 python 版本介于 2.5.0 和 3.0.0 之间。
3. 写文件
binding.gyp
test.cc
test.js
具体内容请参考 Node.js调用C/C++
4. 编译
调用
5. 运行
6. 入门例子
Node.js调用C/C++
Hello World例子--官网
6. 参考
Nodejs 6.x 中文文档
Node.js v7.2.1 Documentation
Node.js 和 C++ 之间的类型转换
Javascript里有个C:Part 1 - 基础
因此,Google搜索:nodejs调用dll
☛ 步骤如下:
首先参考 Node 调用 C++ 中的环境配置,安装 node-gyp 及 Python 环境
安装
注意: 根据 node-gyp 的GitHub显示,请务必保证你的 python 版本介于 2.5.0 和 3.0.0 之间。
安装 node-ffi
☛ 实践:
因为我的 dll 文件只暴露了一个 Query 方法,所以我的 query.js 文件如下:
最后,执行
➹ 参考如下:
通过ffi在node.js中调用动态链接库(.so/.dll文件)
nodejs调用dll/so文件的方法
然后又折腾了会,要不就是传参错了,或者路径错了,总之,这些都是小事儿啦,最后,终于成功了!!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++
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效率果然高!
相关文章推荐
- windows下nodejs环境的搭建(基础篇)
- tbb flow graph node types
- Node.js管道流Stream
- Node.js作为服务器的文件上传
- Node.js缓冲器Buffer
- Node.js后台数据处理相关方法
- Swap Nodes in Pairs
- nodejs中aes-128-cbc加密和解密
- nodejs 开发调试
- Node.js自定义模块Calculate
- 【Gulp】gulp入门安装
- Leetcode 24 Swap Nodes in Pairs
- 用nodejs自动化保存每日bing美图?
- process.stdin的end事件如何触发?---关于nodejs底层的标准输入与输出的坑
- npm安装node.js模块切至淘宝源安装提升下载速度
- Node.js 入门学习
- 使用NodeJS将XML解析成JSON及性能比较
- nodejs webapi单元测试
- kubernetes port nodePort targetPort 理解
- nodejs之cordova 跨平台开发