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

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

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

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

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


当前回答

在我的例子中,我使用的是c#中的原生DLL。这个DLL依赖于其他几个缺失的DLL。一旦添加了其他dll,一切就正常了。

其他回答

对于。net core,确保Ijwhost.dll在输出目录中,有时它没有被复制,这将导致错误。参见https://github.com/dotnet/runtime/issues/38231和https://stackoverflow.com/a/58773266/9665729

如果您正在导入非托管DLL,则使用

CallingConvention = CallingConvention.Cdecl 

在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)

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

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

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