某些Windows DLL如何明显支持32位和64位?

某些Windows DLL如何明显支持32位和64位?

问题描述:

我似乎能够从32位或64位应用程序访问C:\WINDOWS\system32\opengl32.dll(以及类似C:\WINDOWS\system32\glu32.dll)中的函数(值得一提的是,我是从单独的32位和64位Python 2.7解释器,通过​​模块)。某些Windows DLL如何明显支持32位和64位?

glut32.dll,事情是不同的。它只发生在我的Path上,作为GraphViz的32位安装的一部分。从32位Python,我可以动态链接到它,但从64位Python我得到[Error 193] %1 is not a valid Win32 application。现在

,这个错误不会我吃惊,因为我一直认为的DLL必须承诺在Windows上一个结构或另一种(特别是this recent question and its answers似乎说的话)。我惊讶的是缺少在第一种情况下的错误... opengl32.dll如何做到这一点,以及如何在构建我自己的DLL时复制此行为?

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v=vs.85).aspx –

+0

这只是令人难以置信的鬼鬼祟祟。非常感谢。 – jez

在64位系统上,只有64位进程使用c:\Windows\System32\opengl32.dll。对于32位处理系统重定向c:\Windows\System32\opengl32.dllc:\Windows\SysWOW64\opengl32.dll

File System Redirector

在大多数情况下,每当一个32位的应用程序试图访问%WINDIR%\ System32下,访问将被重定向到%WINDIR%\ Syswow64资料。访问%windir%\ lastgood \ system32被重定向到%windir%\ lastgood \ SysWOW64。访问%windir%\ regedit.exe被重定向到%windir%\ SysWOW64 \ regedit.exe。