我问这个问题是因为我注意到许多64位的EXE文件链接到了看起来像是32位DLL的库。
例如,我的64位MFC应用程序链接到了user32.dll,urlmon.dll,wininet.dll
等三个32位DLL,它们都存在于windows\system32中。
那么这是一些适用于这些DLL的微软特有魔法,还是对于需要使用旧的32位DLL的64位EXE来说,存在向后兼容性呢?
我问这个问题是因为我注意到许多64位的EXE文件链接到了看起来像是32位DLL的库。
例如,我的64位MFC应用程序链接到了user32.dll,urlmon.dll,wininet.dll
等三个32位DLL,它们都存在于windows\system32中。
那么这是一些适用于这些DLL的微软特有魔法,还是对于需要使用旧的32位DLL的64位EXE来说,存在向后兼容性呢?
64位的可执行文件不能连接到32位的DLL库,反之亦然。在64位的Windows操作系统中,Windows\System32目录下的DLL库实际上是64位的DLL库。32位的DLL库则位于Windows\SysWow64目录下。
32位Windows可以调用64位系统中的DLL(这在Windows中称为WOW,即Windows on Windows),但反之则不行。
以下是解释:
http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/
希望对您有所帮助。
最新版本的依赖项检查器(在此处找到:http://www.dependencywalker.com/)已解决了此问题。它可以找到正确的DLL文件,并避免错误提示不准确的情况。
(虽然我来晚了,但当我遇到类似问题时,谷歌仍然能找到这个问题。)