Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cli 具有C++/CLI层的.Net可执行文件获取System.BadImageFormatException_C++ Cli_Badimageformatexception - Fatal编程技术网

C++ cli 具有C++/CLI层的.Net可执行文件获取System.BadImageFormatException

C++ cli 具有C++/CLI层的.Net可执行文件获取System.BadImageFormatException,c++-cli,badimageformatexception,C++ Cli,Badimageformatexception,这个问题对于任何处理c++/cli的人来说似乎都很常见,但我缺少了一些典型的解析路径。我有一个.Net程序集PHD.exe,它引用了c++/CLI dll。此DLL动态链接多个win32本机DLL 例外文本: 主窗口异常:“X.BLCInterfaceBehavior”的类型初始值设定项引发异常。System.BadImageFormatException:无法加载文件或程序集“CppCLI.dll”或其依赖项之一。不是有效的Win32应用程序。来自HRESULT的异常:0x800700C1 按

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

例外文本:

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

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

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

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

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

错误:找到具有不同CPU类型的模块。 警告:由于延迟负载相关模块中缺少导出功能,至少有一个模块具有未解析的导入

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

我在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 GambitManagedRapper.dll

ModLoad:01270000 0131000 GambitManagedRapper.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中运行了这个命令,这让我更加困惑:

埃夫马赫 有效计算机:x86兼容x86


我真的不知道接下来该怎么办,如果有任何建议,我将不胜感激。

这似乎是倒退,但32位应用程序应该从SysWOW64加载。如果展开该目录名,它将显示在Windows64上Windows的系统目录中。Windows64上的Windows是在64位操作系统上运行的32位应用程序。令人困惑的是,64位应用程序从System32加载DLL。看起来,仅仅创建一个System64目录会更简单、更干净,但我相信这样做是有一些应用程序兼容性的原因的。啊,好的。感谢您的解释,但这仍然让我想知道什么dll无法加载。请下载并使用32位版本的Dependency Walker。如果将32位映像加载到64位版本中,则该版本不会执行正确的操作。