参考 深入浅出 electron 的 dll 调用 - 知乎 (zhihu.com)
根据github社区的反馈,该项目已经很久没维护,在高版本环境下容易出现bug(虽然我暂时未出现),最好使用ffi-rs或者koffi代替
ffi-napi
使用 ffi-napi,你可以在 Node.js 中直接调用已编译的动态链接库(.dll 文件或者 .so 文件)。 和electron安装包类似,下载安装过程中会执行它内部配置的执行脚本, ffi-napi会进行编译。也正因为如此,需要准备编译环境。
我自己是预先建立一个测试项目进行测试,环境如下:
- node: 18.20.4
- Python: 3.12.5
- Visual Studio 2022
- node-gyp: 10.2.0
- ffi-napi: 4.0.3
- ref-napi: 3.0.3
公共步骤如下:
1. 准备
# NodeJS 编译 C/C++ 依赖用到 npm i -g node-gyp
npm i -g node-gyp
项目目录下配置.npmrc文件
sass_binary_site=https://registry.npmmirror.com/node-sass/
profiler_binary_host_mirror=http://registry.npmmirror.com/node-inspector/
registry=https://registry.npmmirror.com
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
ELECTRON_BUILDER_BINARIES_MIRROR=http://npmmirror.com/mirrors/electron-builder-binaries/
# 环境路径,请自行设置
python=C:\Users\luo25\AppData\Local\Programs\Python\Python312\python.exe
msvs_version=2022
2. 安装ffi-napi
npm i ffi-napi
3. 测试使用
新建一个文件test.js
const ffi = require('ffi-napi')
const kernel32_ffi = ffi.Library('kernel32', {
SetDllDirectoryA: ['bool', ['string']]
})
console.log('kernel32_ffi',kernel32_ffi)
运行一下是否成功
node test.js
4. 在实际项目安装编译遇到的问题
- 缺少VC++ toolset
根据报错警告,没有VC++ toolset. 打开vs安装面版进行安装
2. dll位数和node位数不一致。
报错弹出win32 193
dll由于是32位,node环境默认是64位。 可以安装32位的node,nvm切换node环境解决。