32 位 dll 参考在 64 位机器上没有失败

Posted

技术标签:

【中文标题】32 位 dll 参考在 64 位机器上没有失败【英文标题】:32 bit dll referennce not failing on the 64 bit machine 【发布时间】:2013-03-23 10:43:40 【问题描述】:

我创建了一个控制台应用程序。在那个应用程序中,我引用了一个 x86 编译的 dll。在项目设置中,我将目标平台更改为 x64。

当我运行应用程序 (F5) 时,它会抛出 BadImageFormatException。没关系,但是如果我只是构建(构建成功)并将 .exe 文件复制到其他一些 64 位操作系统机器并运行运行正常的 exe,而不是在 VS 中运行应用程序。

为什么它在另一台机器上没有失败。是什么原因?

我的开发机是64bit windows 7,VS2010是32bit,另一台机器是64bit windows server 2008 R2。

【问题讨论】:

【参考方案1】:

因为 32 位 dll 与 64 位 CPU 兼容,另一方面,64 位 dll 与 32 位 CPU 不兼容。

当您调试应用程序时,调试器预计应用程序是 64 位的,这就是它失败的原因。

尝试不调试CTRL+F5运行它,它会运行得很好。

【讨论】:

不调试也会抛出同样的异常。我的应用程序目标平台设置为 x64。 (我在原来的问题中提到过)

以上是关于32 位 dll 参考在 64 位机器上没有失败的主要内容,如果未能解决你的问题,请参考以下文章

Win32 32 位进程加载 64 位 kernel32.dll

Regsvr32 在64位机器上的用法(转载)

C# PInvoking user32.dll 在 64 位系统上

64位 regsrv win10_Regsvr32 在64位机器上的用法

64位 regsrv win10_Regsvr32 在64位机器上的用法

无法在 32 位机器上注册使用 VS2012/VC++ 构建的 COM DLL