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

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

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

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

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


当前回答

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

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

其他回答

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

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

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

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

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

在我的例子中,我没有将正确的项目设置为启动项目。我进入解决方案设置,选择了正确的启动项目,它工作了

这篇文章有点偏离主题,但是搜索这个错误消息把我带到了这里。

如果您正在通过团队系统进行构建并得到此错误,则构建定义流程选项卡具有“MSBuild Platform”设置。如果设置为“自动”,您可能会遇到此问题。将其更改为“X86”也可以解决该错误。

进入:工具→选项→项目和解决方案→Web项目→使用64位版本的IIS Express。 更改以下web服务项目的设置: