前言
記錄一下常見的動態連錯誤;
內容
Uncaught Error: Dynamic Linking Error: Win32 error 126
- DLL引用的路徑錯誤,檢查下DLL的路徑是否正確
// 正確示例
let DllA = path.resolve(__dirname, '../../../xxx/xxxx.dll')
// 生產環境
if (process.env.NODE_ENV !== 'development') {
DllA = path.resolve(__dirname, '../../../../xxx/xxx' + arch + '.dll')
DllB = path.resolve(__dirname, '../../../../xxx/xxxx.dll')
}
Uncaught Error: Dynamic Linking Error: Win32 error 193
- DLL位數不對,根據系統來確定使用x86還是x64,可通過
os
進行判斷引入相應的DLL
// 正確示例
const arch = os.arch() === 'x64' ? 'x64' : 'x86'
let DllA = path.resolve(__dirname, '../../../xxx/xxx' + arch + '.dll')
if (process.env.NODE_ENV !== 'development') {
DllA = path.resolve(__dirname, '../../../../xxx/xxx' + arch + '.dll')
}
Uncaught Error: Dynamic Linking Error: Win32 error 127
- DLL沒有對應的函數或函數定義錯誤,可以使用
函數查看器
進行查看 - DLL錯誤,比如系統的一些DLL可以直接進行引用或者還需要引用其他的DLL文件(如: 引入A,但是A需要引入B)
函數查看器下載地址
// 正確示例
const User32 = ffi.Library('user32.dll', {
GetTopWindow: ['long', ['long']],
GetWindowThreadProcessId: ['int', ['long', 'int']],
GetForegroundWindow: ['long', []],
IsHungAppWindow: ['bool', ['long']]
})