C++ 使用64位regsvr32注册32位DLL
考虑到以下理解:C++ 使用64位regsvr32注册32位DLL,c++,windows,com,rpc,C++,Windows,Com,Rpc,考虑到以下理解: 32位进程无法加载64位dll,反之亦然 对于注册/注销DLL,在通过LoadLIbrary将目标DLL加载到其地址空间后,调用入口点DllRegisterServer/DllUnregisterServer 在64位系统上,32位版本的regsvr32出现在C:\Windows\SysWOW64 但是在我的2008 R2机器上,我能够通过64位regsvr32注册一个32位dll。这怎么可能?我错过什么了吗 我想在截图中突出显示的示例是最后一个弹出对话框的示例。看来Mats
LoadLIbrary
将目标DLL加载到其地址空间后,调用入口点DllRegisterServer
/DllUnregisterServer
C:\Windows\SysWOW64
我想在截图中突出显示的示例是最后一个弹出对话框的示例。看来Mats和我的假设是正确的。MS重新设计了64位regsvr32,以便基于目标dll位,它可以从%SYSWOW64%生成一个新的32位regsvr32进程来注册dll。为了证明这一点,我启动了procexp,监视了32位DLL的弹出窗口,下面是显示的内容 需要注意的几件事
这应该准确地解释它是如何发生的:
(来源:)
regsvr32
将在内部启动另一个位双胞胎,以匹配DLL的位。这就是注册成功的方式。您不需要关心是启动32位还是64位版本的regsvr32
,因为它会处理不匹配问题
您需要注意的场景是从Visual Studio作为调试主机启动
regsvr32
。您需要正确的位,因为实际注册的子进程将在调试器之外运行,您将无法单步执行代码。是的,这就是我的想法。谢谢你的努力。