我在64位系统上调用32位非托管DLL的函数。 我得到的是:
BadImageFormatException:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)
起初,我将我的项目设置为Any CPU平台,因此我将它们都更改为x86,但此错误仍在发生。 这真的是我所知道的唯一解决方案。
DLL没有损坏或任何东西,因为我可以将它们与其他程序一起使用(我没有源代码)。 我想也许它没有找到依赖,但我检查了,他们都在那里。 另外,在这种情况下不会抛出DllNotFoundException吗?
我还可以做些什么? 在您说“使用64位非托管DLL”之前,让我指出没有一个。 ;)
#1楼
这篇文章有点偏离主题,但搜索此错误消息将我带到了这里。
如果您正在通过团队系统构建并获得此错误,则构建定义过程选项卡具有“MSBuild平台”设置。 如果将其设置为“自动”,则可能会遇到此问题。 将其更改为“X86”也可以解决错误。
#2楼
在我的情况下,我在C#中使用本机DLL。 此DLL依赖于其他几个缺失的DLL。 一旦添加了其他DLL,一切正常。
#3楼
我用“Windows”方式解决了这个问题。 检查完所有设置,清理解决方案并重建后,我只需关闭解决方案并重新打开即可。 然后它工作,所以VS可能没有在清洁过程中摆脱一些东西。 当逻辑解决方案不起作用时,我通常会转向不合逻辑的(或看似不合逻辑的)。 Windows不会让我失望。 :)
#4楼
如果您使用的是任何CPU ,则在选中“ 首选32位”选项时可能会遇到此问题:
确保在项目属性的Build选项卡中取消选中此选项!
#5楼
在Visual Studio中 ,右键单击您的项目 - >在左侧窗格中单击“ 生成”选项卡,
在Platform Target下选择x86(或者更常见的是与您链接的库匹配的体系结构 )
我希望这可以帮助别人! :)
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3161623
