2012-02-08 88 views
4

我確定64位DLL無法鏈接到32位DLL。32位和64位DLL如何鏈接到相同的C: system32 kernel32.DLL?

+1

IIRC這與虛擬映射shenanigans Windows在較新版本中所做的操作有關。一個DLL路徑可能導致數十個不同的版本,具體取決於誰在問。 – 2012-02-08 11:49:33

+1

DLL鏈接到kernel32.lib,而不是kernel32.dll。 Sophia告訴我們,在運行時加載的實際DLL是另一回事。 – 2012-02-08 13:11:37

回答

6

Wow64有一個文件重定向器。它具有相同的命名dll,但存儲在適當的位置。這個概念在http://msdn.microsoft.com/en-us/library/aa384187(v=vs.85).aspx

%windir%\ System32目錄是爲64位應用程序保留的。當創建64位版本的DLL時,大多數DLL文件名不會更改,因此32位版本的DLL存儲在不同的目錄中。 WOW64使用文件系統重定向器來隱藏這種差異。

在大多數情況下,每當一個32位的應用程序試圖訪問%WINDIR%\ System32下,訪問將被重定向到%WINDIR%\ Syswow64資料。訪問%windir%\ lastgood \ system32被重定向到%windir%\ lastgood \ SysWOW64。訪問%windir%\ regedit.exe被重定向到%windir%\ SysWOW64 \ regedit.exe。