調用dll動態庫我這里主要用了以下幾個依賴:
"dependencies": {
"ref-array-napi": "^1.2.0",
"ref-napi": "^1.4.3",
"ref-struct-napi": "^1.1.0",
"ffi-napi": "^2.4.7"
}
注意:dll 是 64位還是 32 位的 ,它和 node 是一致的。
復制代碼
我這里用的 window 7 系統的 其他版本的系統應也是差不多的
實現步驟
安裝ffi之前需要的環境有4個
1. python2.x 這里我用的是2.7版本,(3.x不支持); 安裝完成后需要將python設置為環境變量
2. .net framework 4.5.1
3. visual C++ Build Tools,或者 (vs2015以上(包含15))
4. cnpm install --global --production windows-build-tools
1、我這里先將 npm 改為 淘寶鏡像 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
2、首先安裝 node-gyp
cnpm install node-gyp -g
3、安裝以上依賴
"ref-array-napi": "^1.2.0",
"ref-napi": "^1.4.3",
"ref-struct-napi": "^1.1.0",
"ffi-napi": "^2.4.7"
4、調用方法
1. const ffi = require("ffi-napi"); // 引入ffi
// `ffi.Library`用於注冊函數,第一個入參為DLL路徑,最好為文件絕對路徑
2. const libm = ffi.Library("./dll/x64/MTScaleAPI/MTScaleAPI.dll", {
//ExecuteTaskInFile是dll中定義的函數,兩者名稱需要一致
//[a, [b,c....]] a是函數出參類型,[b,c]是dll函數的入參類型
ExecuteTaskInFile: ['int', ['object']],
}); // 找到dll文件引入
4、完事試試運行
復制代碼
問題解決
Q:
error msb4019:未找到導入的項目“C:\Program Files (x86 )\MSBuild\
Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Default.props”
復制代碼
A:
// 在命令行執行改命令即可,2017 是你當前vs對應的版本,比如你裝的是2015版本,就改成2015
npm config set msvs_version 2017
復制代碼
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 126
復制代碼
A:
Dll引用的路徑不對,檢查路徑是否書寫正確,需要用絕對路徑
復制代碼
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 193
復制代碼
A:
dll 位數不對應,例如electron/nodejs是32位的dll是64位的
復制代碼
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 127
復制代碼
A:
DLL中沒有找到對應名稱的函數,需要檢查頭文件定義的函數名是否與DLL調用時寫的函數名是否相同。
Dll錯誤,檢查你的dll文件是否還引用了其他的資源及dll文件
復制代碼
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 1114
復制代碼
A:
dll初始化失敗,一般是在打包成exe文件發生,可能是你的dll在打包后的位置不正確,
程序調用不到就會去系統c盤找對應的dll文件