diff --git a/App/lib/core/Gen/ImportsGenMixin.vp b/App/lib/core/Gen/ImportsGenMixin.vp index 9a08989..64a7260 100644 --- a/App/lib/core/Gen/ImportsGenMixin.vp +++ b/App/lib/core/Gen/ImportsGenMixin.vp @@ -556,6 +556,9 @@ novirtual class ImportsGenMixin: if string.strcmp(mod_name, "ctraits") == 0: return 1 if string.strcmp(mod_name, "viperbuild") == 0: return 1 if string.strcmp(mod_name, "ffilib") == 0: return 1 + # runtime CDLL 的 thunk 会调用 _ffilib(真实运行时库),把它登记为已导入模块, + # 让按需可达性扫描收录它并分配 SHA1(否则 thunk 生成时报 module not found)。 + if string.strcmp(mod_name, "_ffilib") == 0: return 1 mod_sha1: str = StubMergerStore.LookupSha1ByModName(mod_name) if mod_sha1 is None: # App sibling exemption: a {mod_name}.vp/.py exists next to the current file diff --git a/App/lib/core/builtin/ViperBuild.vp b/App/lib/core/builtin/ViperBuild.vp index 1953980..fd9186c 100644 --- a/App/lib/core/builtin/ViperBuild.vp +++ b/App/lib/core/builtin/ViperBuild.vp @@ -10,6 +10,7 @@ import lib.Projectrans.Utils as Utils import lib.Projectrans.Config as Config import lib.core.VLogger as VLogger import lib.core.IncludesScanner as IncludesScanner +import stdio # kernel32!GetEnvironmentVariableA (DWORD(LPCSTR, LPSTR, DWORD)) - declared here, same as includes/traceback.vp; # win32base.vp omits it but kernel32 is linked anyway; only for selfmachine host detection. @@ -465,6 +466,9 @@ def _HandleImport(stmt: ast.Import*) -> int: # 宏库:不参与 BFS,只记别名(CDLL 语句由 _HandleCDLL 抽取) if al.asname is not None: _ffi_alias = _DupScratch(al.asname) else: _ffi_alias = _DupScratch("ffilib") + # runtime CDLL 的 thunk 要调 _ffilib(真实运行时库):显式加入闭包, + # 否则按需可达性扫描不会收录它,_resolve_module_sha1("_ffilib") 会返回 None。 + _AddPending("_ffilib") else: _AddPending(al.name) return 0