node获取dll处理过程遇到的坑

node调用.dll文件踩坑日记

环境准备

1.node版本 win64
2.python 2.7

遇到的坑

安装–nw-gyp、ffi、ref、ref-array

1.node是64位,但是dll文件及依赖是32位,报错 不是有效的 Win32 应用程序,详细可查询Windows错误码大全https://www.jianshu.com/p/79bbb96e0065
2.dll文件中的方法及参数对应
3.由于本人是java程序员,所以将对应dll文件对应的jar包用jd-gui反编译后对照英文文档以及eXeScope反编译dll文件,二者对比阅读;
数组参照
javascript
var ffi = require(“ffi”);
var ArrayType = require(‘ref-array’);

var IntArray = ArrayType(ref.types.int);
var lib = ffi.Library(‘mylib’, {
“analysis”: [ ‘int’, [ ‘int’, IntArray ] ]
});
var factors = new IntArray(new Array(100));
lib.analysis(32, factors);
console.log(The factors of 32 are ${factors.join(',')});

ffi中的类型

ffi type
int8 Signed 8-bit Integer
uint8 Unsigned 8-bit Integer
int16 Signed 16-bit Integer
uint16 Unsigned 16-bit Integer
int32 Signed 32-bit Integer
uint32 Unsigned 32-bit Integer
int64 Signed 64-bit Integer
uint64 Unsigned 64-bit Integer
float Single Precision Floating Point Number (float)
double Double Precision Floating Point Number (double)
pointer Pointer Typestring Null-Terminated String (char *)

比如获取vlc.dll

libvlc_media_player_new_from_media':['pointer',['pointer']],//创建libvlc_media_player_t
        'libvlc_media_player_set_title':['void',['pointer','int']],//添加加密参数
}
LibVLC.libvlc_media_player_new_from_media(libvlc_media_t)
LibVLC.libvlc_media_player_set_title(libvlc_media_player_t,2)

##转载及应用
[1]: https://blog.csdn.net/qpx0033/article/details/51290535
[2]: https://blog.csdn.net/jigetage/article/details/80680757
[3]: https://www.jianshu.com/p/5af3ad2b0856
[4]: https://www.jianshu.com/p/79bbb96e0065

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值