以前作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)
複製代碼