打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
nodejs调用dll/so文件的方法

本人之前发过一贴,关于nodejs引用dll的http://cnodejs.org/topic/51c2ba5c73c638f3703e4185#534faa9c1969a7b22a3da918贴文里的方法不是很优美,觉得写addon调用不完善,一直想计划写一个中间件模块出来;考虑:1、获得dll的所有接口函数,写成json格式文件api.json;2、根据1得到的json格式文件api.json生成addon的c++代码addon.cc,3、执行使用node-gyp和配置文件将addon.cc编译成addon.node【注意一定要使用vs2010,使用其他版本VS失败,不知原因】4、调用addon.node文件里的接口函数即可;

后来才注意到有个ffi模块比较好,试了一下,不错;建议使用这个模块调用,还有更好的方法请坛友指出例一:调用系统的user32.dll函数 MessageBoxW,有4个参数,输出一个整数 ,

var FFI = require('ffi');function TEXT(text){   return new Buffer(text, 'ucs2').toString('binary');}var user32 = new FFI.Library('user32', {   'MessageBoxW':    [      'int32', [ 'int32', 'string', 'string', 'int32' ]   ]});var OK_or_Cancel = user32.MessageBoxW(   0, TEXT('I am Node.JS!'), TEXT('Hello, World!'), 1);console.log(OK_or_Cancel);

例二、调用当前目录下的libTest.dll,里面有一个函数factorial,输入一个整数,输出一个整数

var FFI = require('ffi');var func = new FFI.Library('libTest', {   'factorial':    [      'int32', [ 'int32']   ]});var n = func.factorial(5);console.log(n);

三、说明可以注意到FFI.Library的第二个参数是json,里面列出了需要用到的函数名,输入参数格式,输出结果的格式;

'int32', [ 'int32', 'string', 'string', 'int32' ]

这里就表明,(1)输出结果为整数;(2)后面的数组表示有4个参数,参数格式依次是整数,字符串,字符串,整数( 3 ) 字符串要转化一下才可以使用; 注意看例一; new Buffer(text, ‘ucs2’).toString(‘binary’);ffi模块同样能调用*inux 下的so文件


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
node
Nodejs实现Excel表格操作
nodejs如何调用动态链接库(dll)呢?写一个addon来处理,写此文抛砖引玉。
Node.js技术架构
Newtonsoft.Json.dll序列化为json,null值自动过滤
[PHP小课堂]让PHP能够调用C的函数-FFI扩展
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服