对于处理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怪癖中的一个。同样的事情适用于具有diff cpu类型的模块 - 我想我已经在SO上看到了“忽略”消息。
我针对winDBG运行应用程序,并看到一些Windows DLL正在从SysWOW64加载 - 这似乎是错误的。一些例子:
ModLoad:75880000 75910000 C:\ Windows \ syswow64 \ GDI32.dll
ModLoad:753f0000 753fa000 C:\ Windows \ syswow64 \ LPK.dll
ModLoad:76c60000 76cfd000 C:\ Windows \ syswow64 \ USP10.dll
ModLoad:76d00000 76da0000 C:\ Windows \ syswow64 \ ADVAPI32.dll
ModLoad:75fe0000 76c2a000 C:\ Windows \ syswow64 \ SHELL32.dll
这些不应该从System32加载吗?
最后,WinDBG显示了异常,但我没有看到任何有用的东西:
ModLoad:6dfc0000 6e060000 GambitManagedWrapper.dll
ModLoad:01270000 01310000 GambitManagedWrapper.dll
ModLoad:72eb0000 72ebe000 C:\ Windows \ SysWOW64 \ RpcRtRemote.dll
ModLoad: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)
不确定从何处开始,并会感谢任何建议。