From 7be2c692562f373d9a07074cd32bcfb4f04eff20 Mon Sep 17 00:00:00 2001 From: hicccc77 <98377878+hicccc77@users.noreply.github.com> Date: Sun, 15 Mar 2026 14:15:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20getAvatarUrls=20?= =?UTF-8?q?=E7=AB=9E=E6=80=81=E5=AF=BC=E8=87=B4=20handle=20=E4=B8=BA=20nul?= =?UTF-8?q?l=20=E7=9A=84=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 await setImmediate 让出控制权前先捕获 handle, await 后重新校验 handle 是否仍有效,避免连接关闭后 向 koffi DLL 传入 null 导致 TypeError。 --- electron/services/wcdbCore.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/electron/services/wcdbCore.ts b/electron/services/wcdbCore.ts index 7e69caa..517fedf 100644 --- a/electron/services/wcdbCore.ts +++ b/electron/services/wcdbCore.ts @@ -1488,10 +1488,19 @@ export class WcdbCore { } // 让出控制权,避免阻塞事件循环 + const handle = this.handle await new Promise(resolve => setImmediate(resolve)) + // await 后 handle 可能已被关闭,需重新检查 + if (handle === null || this.handle !== handle) { + if (Object.keys(resultMap).length > 0) { + return { success: true, map: resultMap, error: '连接已断开' } + } + return { success: false, error: '连接已断开' } + } + const outPtr = [null as any] - const result = this.wcdbGetAvatarUrls(this.handle, JSON.stringify(toFetch), outPtr) + const result = this.wcdbGetAvatarUrls(handle, JSON.stringify(toFetch), outPtr) // DLL 调用后再次让出控制权 await new Promise(resolve => setImmediate(resolve))