修正 DLL 函数调用,使用正确的 stdcall 语法以支持 Windows 32位 DLL
This commit is contained in:
@@ -72,21 +72,22 @@ function loadDll() {
|
||||
lib = koffi.load(dllPath);
|
||||
|
||||
// 尝试使用 stdcall 约定,这对于 Windows 32位 DLL 很常见
|
||||
// 如果函数名被修饰(如 _Syn_FindUSBReader@0),__stdcall 会自动处理
|
||||
const stdcall = "__stdcall";
|
||||
// koffi 中指定 stdcall 约定需要在函数名前加 __stdcall,但不能作为字符串拼接在类型里
|
||||
// 正确语法是 lib.stdcall('函数名', '返回类型', ['参数类型'...]) 或者在字符串定义中使用特定格式
|
||||
// 根据 koffi 文档,字符串定义格式为: "ReturnType __stdcall FunctionName(Args...)"
|
||||
|
||||
return {
|
||||
Syn_FindUSBReader: lib.func(`${stdcall} int Syn_FindUSBReader()`),
|
||||
Syn_USBOpenPort: lib.func(`${stdcall} int Syn_USBOpenPort(int)`),
|
||||
Syn_USBClosePort: lib.func(`${stdcall} int Syn_USBClosePort(int)`),
|
||||
Syn_FindUSBReader: lib.func("int __stdcall Syn_FindUSBReader()"),
|
||||
Syn_USBOpenPort: lib.func("int __stdcall Syn_USBOpenPort(int)"),
|
||||
Syn_USBClosePort: lib.func("int __stdcall Syn_USBClosePort(int)"),
|
||||
Syn_USBStartFindIDCard: lib.func(
|
||||
`${stdcall} int Syn_USBStartFindIDCard(int, uint8*, int)`
|
||||
"int __stdcall Syn_USBStartFindIDCard(int, uint8*, int)"
|
||||
),
|
||||
Syn_USBSelectIDCard: lib.func(
|
||||
`${stdcall} int Syn_USBSelectIDCard(int, uint8*, int)`
|
||||
"int __stdcall Syn_USBSelectIDCard(int, uint8*, int)"
|
||||
),
|
||||
Syn_ReadMsg: lib.func(
|
||||
`${stdcall} int Syn_ReadMsg(int, int, _Out_ IDCardData*)`
|
||||
"int __stdcall Syn_ReadMsg(int, int, _Out_ IDCardData*)"
|
||||
),
|
||||
};
|
||||
} catch (err) {
|
||||
|
||||
Reference in New Issue
Block a user