From 65f0f524a5555afe7bda426d2b83abaafdb8f7c9 Mon Sep 17 00:00:00 2001 From: yuchenglong Date: Thu, 20 Nov 2025 11:54:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20DLL=20=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E8=B0=83=E7=94=A8=EF=BC=8C=E4=BD=BF=E7=94=A8=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E7=9A=84=20stdcall=20=E8=AF=AD=E6=B3=95=E4=BB=A5=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20Windows=2032=E4=BD=8D=20DLL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/idcard-worker.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/electron/idcard-worker.js b/electron/idcard-worker.js index c7563a9..91040df 100644 --- a/electron/idcard-worker.js +++ b/electron/idcard-worker.js @@ -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) {