2017-10-06 149 views
1

我似乎能夠從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

回答

2

在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。