在C#应用程序中使用C++/CLI时出现BadImageFormatException错误

7
我正在使用VS 2008开发一个应用程序,其中我有一个未管理的C++库(A),它将两个现有库(B + C)封装起来以简化功能。在一个c++测试应用程序中成功调用和使用(A),证明(A)是可行的。
(A)的主要目的是被一个C#应用程序使用,为了做到这一点,我按照以下链接创建了CLI包装器(D): http://blogs.msdn.com/b/borisj/archive/2006/09/28/769708.aspx 一切似乎都很好,编译一切顺利,我尝试在一个简单的C#应用程序中测试它。我添加了对(D)的引用并启动程序,但在尝试使用该类时收到BadImageFormatException异常。从我读到的人们建议说某处DLL存在版本不匹配的问题,但我已经将所有DLL都编译为Win32以相互匹配。
除此之外,我已将(D)和C#应用程序所需的所有DLL都提供了副本,但仍然遇到问题。我注意到当编译时没有为(D)创建一个dll,这是我猜测它崩溃的原因,但由于我是新手,所以我不知道它是否应该有这个dll。
我可能错过了什么关键点导致这个问题吗?

2
对我来说,这听起来像是一些dll被编译为32位dll,而另一些则被编译为64位dll...或者应用程序正在作为64位进程运行,并尝试使用32位dll,或者相反...类似这样的情况。 - HABJAN
64位进程可以正确加载32位图像,但32位进程无法加载64位图像。 - Gusman
2
@Gusman,那不正确。 - Matt Smith
2个回答

6
尝试将编译模式更改为x86或Any CPU模式。
右键单击解决方案并选择“配置管理器”。
或者,选择“生成”>“配置管理器”。
在“配置管理器”中,将所有项目更改为使用x86或Any CPU进行编译,并尝试两种模式。
请参考上述图片。

2
谢谢,问题似乎在外部库中进一步深入,我已经按照您的建议对所有依赖项进行了操作。 - Rookasaur
2
你只需要将EXE的平台更改为“x86”! - Jochen Kalmbach

1

针对2022年在同一情境中遇到BadImageFormatException错误的人:

对我来说,问题通过禁用C#库属性中的“偏好32位”得以解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接