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
C# PInvoking user32.dll 在 64 位系统上
64位 regsrv win10_Regsvr32 在64位机器上的用法