1

对于处理 c++/cli 的任何人来说,这个问题似乎都很常见,但我在典型的解析路径中遗漏了一些东西。我有一个 .Net 程序集 PHD.exe,它引用了一个 c++/CLI dll。此 DLL 动态链接许多 win32 本机 dll。

异常文本:

主窗口异常:“X.BLCInterfaceBehavior”的类型初始化程序引发异常。System.BadImageFormatException:无法加载文件或程序集“CppCLI.dll”或其依赖项之一。不是有效的Win32应用程序。(来自 HRESULT 的异常:0x800700C1)

按照关于 SO 的其他建议,我检查了我的可执行文件的目标类型。右键单击 > 属性 > 构建选项卡 > 平台 = x86。平台目标:x86。

同样,我检查 c++/cli dll 的项目属性(我希望这是查看的正确位置):属性 > 配置属性 > 链接器 > 目标机器 = MachineX86

我在 CppCLI.dll 上运行 DependencyWalker,得到以下错误:

错误:由于隐式依赖模块中缺少导出函数,至少一个模块具有未解析的导入。

错误:发现具有不同 CPU 类型的模块。警告:由于延迟加载依赖模块中缺少导出功能,至少有一个模块存在未解析的导入。

我不确定如何确定哪个 DLL 缺少预期的导出功能,或者这是否只是 x64 系统上的depends.exe 怪癖之一。同样的事情也适用于具有不同 cpu 类型的模块 - 我想我已经在 SO 上看到了“忽略该”消息。

我针对 winDBG 运行了该应用程序,发现一些 Windows DLL 正在从 SysWOW64 加载——这似乎是错误的。一些例子:

模组加载:75880000 75910000 C:\Windows\syswow64\GDI32.dll

模组加载:753f0000 753fa000 C:\Windows\syswow64\LPK.dll

模组加载:76c60000 76cfd000 C:\Windows\syswow64\USP10.dll

模组加载:76d00000 76da0000 C:\Windows\syswow64\ADVAPI32.dll

模组加载:75fe0000 76c2a000 C:\Windows\syswow64\SHELL32.dll

这些不应该从 System32 加载吗?

最后 WinDBG 显示了异常,但我没有看到任何有用的东西:

ModLoad:6dfc0000 6e060000 GambitManagedWrapper.dll

ModLoad:01270000 01310000 GambitManagedWrapper.dll

模组加载:72eb0000 72ebe000 C:\Windows\SysWOW64\RpcRtRemote.dll

模组加载:6dfc0000 6e060000 C:\Gambit\GambitManagedWrapper.dll

(fbc.ebc):C++ EH 异常 - 代码 e06d7363(第一次机会)

(fbc.ebc):C++ EH 异常 - 代码 e06d7363(第一次机会)

(fbc.ebc):C++ EH 异常 - 代码 e06d7363(第一次机会)

(fbc.ebc):C++ EH 异常 - 代码 e06d7363(第一次机会)

(fbc.ebc):C++ EH 异常 - 代码 e06d7363(第一次机会)

(fbc.ebc):CLR 异常 - 代码 e0434352(第一次机会)

(fbc.ebc):C++ EH 异常 - 代码 e06d7363(第一次机会)

(fbc.ebc):CLR 异常 - 代码 e0434352(第一次机会)

(fbc.ebc):CLR 异常 - 代码 e0434352(第一次机会)

此外,我在 winDBG 中运行了这个命令,这进一步让我感到困惑:

effmach # 有效机器:x86 兼容(x86)

不太确定从这里去哪里,并会感谢任何和所有的建议。

4

0 回答 0