考虑以下的理解
LoadLIbrary
将目标DLL加载到其地址空间之后, regsvr32
调用入口点DllRegisterServer
/ DllUnregisterServer
。 C:\Windows\SysWOW64
但是在我的2008 R2 Box上,我能够通过64位regsvr32注册一个32位的dll。 这怎么可能? 我错过了什么吗?
这应该解释它是如何发生的:
http://alax.info/blog/wp-content/uploads/2009/11/01-Image002.png
regsvr32
将启动它的内部另一位双胞胎来匹配DLL的位数。 这是注册成功的方式。 您无需关心是否启动32位或64位版本的regsvr32
因为它会处理不匹配。
您需要注意的情况是从Visual Studio启动regsvr32
作为调试主机。 你需要正确的位,因为实际注册的子进程会在调试器之外运行,你将无法通过代码。
似乎Mats和我的假设是正确的。 MS已经重新设计了64位regsvr32,以便根据目标dll位的不同,它可以从%SYSWOW64%产生一个新的32位regsvr32进程来注册该DLL。 为了证明这一点,我启动了procexp,窥探了32位DLL的弹出窗口,这就是显示的内容。
几件事要注意