以前作electron集成外设读卡器dll的时候,花了很多的功夫,正好今天下午须要在新电脑上从新安装一下环境,因此记录一下几个关键点。
javascript
windows电脑php
这里其实有三个环境,windows node版本,开发环境node npm包,生产node环境。因此这里为了打包可以顺利,咱们须要从生产环境node环境来倒推。java
加上dll是32位版本node
得出windows node版本:14.16.0 32位,若是不是这样,打包会出错。由于环境上面不兼容。web
nvm install 14.16.0 32
nvm use 14.16.0 32
复制代码
// 管理员模式安装
npm install --global --production windows-build-tools
// 上面的方式可能会卡住好久,或者一直卡住
npm install --global --production windows-build-tools@4.0.0
复制代码
npm install -g node-gyp
复制代码
npm install -g electron-builder
复制代码
"postinstall": "electron-builder install-app-deps",
复制代码
添加这一行,会在install依赖的时候,将ffi-napi编译成electron模块,否则在打包的时候会出错。
npm
红色框表示build native模块。windows
通常外设,会提供对应的dll对接说明文档,提供的通常没有electron版本,基本是java,C#,php等版本。因此咱们须要经过用js代码翻译java代码的流程逻辑。
api
稍微麻烦的是一些类型引用。bash
const ffi = require('ffi-napi');
var ref = require('ref-napi')
var ArrayType = require('ref-array-napi')
var ByteArray = ArrayType(ref.types.byte)
const myAddDll = ffi.Library('dll/mwrf32.dll', {
'rf_init': ['int', ['short', 'long']],
'rf_get_status': ['int', ['byte']],
'rf_card': ['short', ['int', 'short', ByteArray]],
'hex_a': ['short', [ByteArray, ByteArray, 'short']],
'rf_beep': ['short', ['int', 'short']],
'rf_read_hex': ['int', ['short', 'short', ByteArray]],
'rf_authentication': ['short', ['int', 'short', 'short']]
})
复制代码
不少类型会用到ByteArray。这里采用下面的代码来定义类型:markdown
var ref = require('ref-napi')
var ArrayType = require('ref-array-napi')
var ByteArray = ArrayType(ref.types.byte)
复制代码