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