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

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

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

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

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


当前回答

如果您在单击绿色箭头按钮运行应用程序时遇到此错误,但仍然希望以64位运行应用程序。你可以在VS 2013、2015、2017和2019中这样做

转到:工具>选项>项目和解决方案> Web项目>使用64位版本的IIS Express

或者你可以在项目属性> Web > Bitness中做每个项目

其他回答

如果您在单击绿色箭头按钮运行应用程序时遇到此错误,但仍然希望以64位运行应用程序。你可以在VS 2013、2015、2017和2019中这样做

转到:工具>选项>项目和解决方案> Web项目>使用64位版本的IIS Express

或者你可以在项目属性> Web > Bitness中做每个项目

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

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

可能导致此异常的另一个原因是Dll的目标平台缺少c++可重分发文件。在虚拟机上测试时,我很难找到答案。

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

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