获取DLL文件的CLSID?

时间:2010-02-17 11:41:56

标签: windows com dll clsid

我想创建一个小应用程序,以便从注册表中添加和删除用户定义的上下文菜单条目。为了做到这一点,我需要以某种方式获取任意DLL的CLSID,以便在写入新条目之前,如果它们存在,我可以备份它们。

虽然regsrv32以某种方式设法创造了这个神奇的数字,但我没有找到任何方法来获取这个数字。

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

  1. 扫描DLL名称的注册表
  2. 如果找不到,请注册,再次扫描,然后再次注销
  3. 如果已重命名DLL,我可能会发现问题的可能性。

2 个答案:

答案 0 :(得分:4)

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

MSDN上有关于此类事情的一些信息。它是一个旧的以VB6为中心的链接,但它提供了有关以这种方式检查COM组件的有用信息。

答案 1 :(得分:2)

您可以尝试使用RegOverridePredefKey()拦截regsvr32对注册表的作用 - 调用RegOverridePredefKey(),然后重现regsvr32的作用 - LoadLibrary()COM服务器,调用DllRegisterServer() - 然后检查完​​成的更改。使用RegOverridePredefKey(),您将隔离更改,而不是让它们变得持久。

相关问题