如何枚举实现特定COM接口的所有coclass?

时间:2010-12-13 20:34:39

标签: c++ com

我将尽可能简单地描述问题;

假设我们有一个定义了几个接口的com客户端。

为了改善我们的com客户端的功能;几个独立的公司开发和部署实现该接口的com服务器。目标计算机可能具有实现相同接口的com服务器。

现在问题是这样;

我们的com客户端不知道目标计算机上的com服务器,因为它们将是独立开发的。但是,我们仍然可以要求独立公司遵循特定的安装程序。

现在问题是这样的;

我们应该使用什么样的技术来找出部署在目标计算机上的所有兼容的com服务器,然后实例化所需的对象?

2 个答案:

答案 0 :(得分:4)

我知道没有标准的COM编目服务,虽然COM +可能有一些东西。看一下HKCR\Component Categories,你会发现组件类型的GUID。与0DE86A57-2BAA-11CF-A229-00AA003D7352类似,描述为“Class implements IPersistPropertyBag”。一个coclass在CLSID\{guid}\Implemented Categories中声明了这个相同的guid。这似乎与您的场景非常匹配。

你必须选择一个guid并告诉组件作者。他们必须使用安装程序编写Implemented Categories键。

通过CLSID键仍然是一个相当尴尬的困难,你不想经常这样做。但至少你不必加载DLL来发现接口,这可能会产生各种令人讨厌的副作用。我建议在“选项”菜单中选择一个对话框,让用户开始扫描并选择,这也是禁用行为不当组件的好方法。

顺便说一句,这可能导致的支持性疼痛通常会使应用程序在“已批准”列表中运行。

答案 1 :(得分:0)

汉斯有个好主意。

之前我没有使用过组件类别,但我建议您不要直接触摸注册表,因为MS提供了访问组件类别的API。看看这个:

http://msdn.microsoft.com/en-us/library/ms692551(v=vs.85).aspx