0

我正在 Win7 x64 机器上开发应用程序。

有一些代码可以调用外部 .dll 文件。.dll 是为 32 位机器构建的。我遇到的问题是在Debug配置中的调试器中运行应用程序时,它工作正常。一旦我切换到Release,任何进入进行 .dll 调用的方法的条目都会失败

An unhandled exception of type 'System.BadImageFormatException' occurred in MyCool.exe

Additional information:  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)

两者ReleaseDebug配置都是相同的,并且正在为 x86 构建应用程序。此问题仅发生在 Windows 7 机器上。我们的客户运行 XP 没有问题。诚然,我们没有运行 XP x64 的客户,因此我无法验证这一点。

这是我的解决方案配置的图像:

我的配置

我已将Platform:选项更改为所有可能的组合,但它仍然无法正常工作。配置中是否有一些隐藏的东西Debug

编辑:我想通了,但我真的不明白这个问题。

Build在项目属性中的每个项目选项卡( CompileVB 项目的选项卡)中,我必须设置Target CPU为 x86 而不是 AnyCPU。

也许这是另一个问题,但是:为什么?在每个项目的基础上将整个解决方案的平台设置为 x86 和将目标 CPU 设置为 x86 之间有什么区别。另外,在上图中:那么该Platform字段的目的是什么?

4

1 回答 1

0

这是因为 AnyCPU 将作为 64 位运行,但您的 DLL 很可能编译为 32 位 DLL。您不能从 64 位可执行文件交叉调用 32 位 DLL。

在将您的应用程序设置为 x86 时,这将强制它作为 32 位应用程序进行编译(和运行)。

于 2015-03-02T18:29:47.387 回答