32位和64位DLL如何链接到相同的C:\ system32 \ kernel32.DLL?

问题描述:

我确定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

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。