我使用 ATL 向导在 Visual Studio 2008 中创建了一个新的简单 COM 对象。该对象具有单个类和简单的方法。 ATL 向导确实为我的类(class)生成了 .rgs
文件。
当我在 XP 机器上运行 regsvr32 Simple.dll
时,该类已注册,信息显示在 HKCR\Simple.SimpleObject
和 HKCR\CLSID\{guid}
中,正如我所期望的。
但是,在我的 64 位 Windows 7 机器上它不一样。我以管理员身份运行 regsvr32,HKCR\Simple.SimpleObject
中的部分出现了。但是 HKCR\CLSID
中的部分永远不会到达那里。因此我无法创建新实例。 (非常绝望,我在 System32 和 SysWOW64 中都尝试过 regsvr32,效果相同。)
为什么不 regsrv32
将数据放入 HKCR\CLSID
?
最佳答案
HKCR 是 HKLM\Software\Classes 的别名,但它没有显示所有内容。在 HKLM\Software\Wow6432Node\Classes\CLSID 中查找已注册的 {guid}。这是 c:\system32\syswow64\regsvr32.exe 写入它们的地方。
你确实提到你已经尝试过了。这确实有问题,您不能随意运行任一版本的 Regsvr32.exe 并注册相同的 DLL。无法在 64 位进程中加载 32 位 DLL。换句话说,64 位版本的 Regsvr32.exe 无法注册 32 位 COM 服务器。反过来说。从这里无法猜测为什么您没有收到错误消息,唯一合理的解释是您实际上没有运行正确版本的 Regsvr32。
要真正调试它,请使用 SysInternals 的 ProcMon 实用程序。它的跟踪显示了 ATL 注册器如何在注册表中写入键。
关于com - 在 Windows7 上,regsvr32 不会写入 HKCR\CLSID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5196229/