修正 DLL 函数调用,使用正确的 stdcall 语法以支持 Windows 32位 DLL

This commit is contained in:
yuchenglong
2025-11-20 11:54:33 +08:00
parent 823a8f83b8
commit 65f0f524a5

View File

@@ -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) {