我从64位系统上的32位非托管DLL调用函数。我得到的是:

BadImageFormatException:试图加载格式不正确的程序。(异常来自HRESULT: 0x8007000B)

首先,我把我的项目设置为任何CPU平台,所以我把它们都改为x86,但这个错误仍然发生。这是我知道的唯一解决办法。

dll没有损坏,因为我可以将它们与其他程序一起使用(我没有源代码)。我想也许它没有找到一个依赖,但我检查了一下,它们都在那里。另外,它不会在这种情况下抛出DllNotFoundException吗?

我还能做什么?在您说“改用64位非托管DLL”之前,请允许我指出没有一个DLL。;)


当前回答

我们也遇到过类似的问题,我们通过将平台目标设置为x86来解决它。

其他回答

在我的案例中,同样的错误发生在出版之后。我以前用另一个平台配置发布过。

解决方案是首先清理发布文件夹,然后才能工作。

(或者将“删除现有文件”选项设置为true)

在我的情况下,这是错误的文件内容。DLL是从网上下载的,但是DLL的内容是HTML页面:D 尝试检查它是否是二进制文件,如果它看起来像正确的DLL:)

还有这个答案,它为我解决了同样的问题。

Posted by Luis Mack on 5/12/2010 at 8:50 AM I've found the same problem, only for a specific project when compiling on a 64-bit machine. A fix that SEEMS to work is to manually alter one character in the image stream EVERY TIME the usercontrol or form is edited in the designer AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w Change to AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w That is 00LjAuMC4w back to 0yLjAuMC4w at the end of the line (00 back to 0y)

如果您尝试在iis7(和/或64位操作系统机器)上运行32位应用程序,将会得到相同的错误。因此,在iis7中,右键单击应用程序的应用程序池,进入“高级设置”,将“启用32位应用程序”更改为“TRUE”。

重新启动你的网站,它应该工作。

我也遇到过这个问题。这里所有的建议都试过了,但都没用。

我找到了另一个东西来检查,它帮我解决了这个问题。在Visual Studio中,右键单击项目并打开“属性”。点击“编译”(或“构建”)选项卡,然后点击底部的“高级编译选项”。

检查下拉菜单“Target CPU”。它应该与您正在构建的“平台”相匹配。也就是说,如果你正在构建“任何CPU”,那么“目标CPU”应该是“任何CPU”。通过激活所有的平台,检查这个设置。