环境配置:
npm>=8.9
electron 全局和package.json要一致
64位系统运行32位dll的时候,node和python2.7,electron都应该为32位。实际使用过程中,所有切成32位以后,node我换成了64位,没有影响。
报错 :Error: A dynamic link library (DLL) initialization routine failed.
解决方案:重新build一下electron和node-ffi,通常rebuild一下ffi即可解决问题
两种方法:
1:一定要在模块当前目录下面执行,不然会找不到bindings文件
node-gyp rebuild --target=1.6.2 -arch=x64 -dist-url=https://npm.taobao.org/mirrors/atom/
如果是32位,换成8.9的32位,并重新
node-gyp rebuild --target=1.6.2 --arch=ia32 --runtime=electron --dist-url=https://npm.taobao.org/mirrors/atom/
2:也可以rebuild重新编译.\node_modules.bin\electron-rebuild .\node_modules\ffi\
报错:Uncaught Error: %1 is not a valid Win32 application.
解决方案:往往是dll调用相关的dll没有找到。ffi的librarypath是系统指定的,不建议自行更换。这里默认位置就是exe启动的路径
比如你使用node.exe 启动,路径就是node.exe的目录,这时候相关dll应该放到node.exe目录下。electron启动同理,放到electron.exe下面能找到的位置。
报错:was compiled against a different Node.js version using NODE_MODULE_VERSION 53.
This version of Node.js requires NODE_MODULE_VERSION 54.
解决方案:版本不匹配,执行rebuild。./node_modules/.bin/electron-rebuild
报错:Dynamic Linking Error: Win32 error 193 或者 Dynamic Linking Error: Win32 error 126
解决方案:查询一下Windows错误码大全。
0193 %1 不是有效的 Win32 应用程序
往往是没有引用到dll文件,dll路径的问题。
0126 找不到指定的模块
ffi注册完引用方法参数,node-ffi传值
C/C++返回值为void的时候,可以用int32或者void。
传入回调函数的时候,类型是pointer。
char* 和w_char*类型是string
异步调用比同步调用多一个参数
//同步调用示例
const result = dll.My_Test('hello', 3, 2)
//异步调用示例
dll.My_Test.async('hello', 3, 2, (err, result) => {
if(err) {
//todo
}
return result
})
electron调用dll应该在主进程中而不应该在渲染进程中,否则回调函数可能不动作