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