获取DLL文件的CLSID?

我想创build一个小应用程序来添加和删除registry中的用户定义的上下文菜单项。 为了做到这一点,我需要得到一个任意的DLL的CLSID,所以我可以备份以前的条目,如果它们存在之前写入新的。

虽然regsrv32设法创造了这个神奇的号码,但我没有find任何方法来自己得到这个号码。

我希望有比这更好的东西:

  1. 扫描DLL名称的registry
  2. 如果找不到,请注册,再次扫描,然后再取消注册

如果DLL已经重新命名,我可以看到问题的可能性。

您可以考虑在指定REGKIND_NONE的DLL上调用LoadTypeLibEx,然后检查通过传回给您的ITypeLib接口获取TypeLibInfo信息。

有关于MSDN上的这种事情的一些信息。 这是一个旧的VB6为重点的链接,但有这样的检查COM组件的有用信息。

您可以尝试使用RegOverridePredefKey()截取regsvr32对注册表所做的操作 – 调用RegOverridePredefKey(),然后重新生成regsvr32所做的 – LoadLibrary()COM服务器,调用DllRegisterserver() – 然后检查所做的更改。 使用RegOverridePredefKey(),您将隔离更改,而不是让它们变成持久的。