electron集成node-ffi调用dll踩坑记录

环境配置

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应该在主进程中而不应该在渲染进程中,否则回调函数可能不动作

 

 

 

 

你可能感兴趣的:(node,electron)