|
整理下electronJs集成ffi踩得坑
最近公司项目停摆,正好有时间分享下这段时间electron集成ffi踩得坑,应该能帮上有相同需求的童鞋们。
项目背景是这样的,windows端的应用采用electronJs开发,由于一些复杂的使用常用,端这边要集成sdk,就是C++编译的dll文件,electron这边调用dll就是通过ffi这个库实现,搭建这个环境可真是一言难尽。
我先来说下,我最终使用的环境和版本
- python 2.7.15
- npm install --global --production windows-build-tools//通过npm的方式安装windows环境的的C++构建工具包
- node: 版本13.9.0(32bit)
- ffi: 分支ffi-napi 版本2.4.6
几个tips
- node使用32bit的版本,是因为我们编译的sdk是有32bit和64bit区别的,64bit的win系统上能跑32bit的程序,所以最终我们打包和使用的sdk都是32bit的
- 安装过程中的一些错误,像环境变量这些,直接百度下怎么设置
- 切换node版本和arch的话,最好安装一个nvm,方便切换node
上面使用的ffi-napi同步调用dll文件是没问题的,但是异步回调的话,就源码报错,应该是库本身的bug,这个不好解决,如果坚持要有异步调用dll封装的方法,我们最终是用别的方式实现。
最后附上另外几个,我测试ffi版本的结果。
整理下electronJs集成ffi踩得坑
node降至10.*的版本,electron降至5.*是可以使用node-ffi这个本身库的,并且能使用c++的回调,但我项目里没法降这个版本,因为我项目比较复杂,还有本地sqlite、分词库其他的node库,降低node版本这些库就rebuild不通过了。node版本12*的话,只能安装ffi对应12*的分支,传送门,package.json里修改如下,这个也是没法用c++回调,其他功能ok。
- "ffi": "github:lxe/node-ffi#node-12", "ref": "github:lxe/ref#node-12", "ref-array": "github:lxe/ref-array#node-12", "ref-struct": "github:lxe/ref-struct#node-12"
复制代码
PS:站长配置的环境,node-v16.20.2-x86和python-3.11.4,成功。
|
|