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

4
我将尽可能简单地描述问题:
假设我们有一个定义了多个接口的com客户端。
为了提高com客户端的功能,几家独立的公司开发和部署实现这些接口的com服务器。目标机器上可能存在实现相同接口的com服务器。
现在出现了问题:
我们的com客户端不知道目标机器上的com服务器,因为它们是独立开发的。但是,我们仍然可以要求独立公司按照特定的安装程序进行操作。
那么问题来了:
我们应该使用什么技术来查找已部署在目标机器上的所有兼容的com服务器,并实例化所需对象?

那么...你想要的是能够枚举实现给定接口的所有 coclass 的能力? - Billy ONeal
@Billy,是的,这就是需要解决的问题。 - Steve Townsend
希望标题不那么糟糕。 - John Dibling
2个回答

3
我不知道有标准的COM目录服务,尽管COM+可能有相关内容。请查看HKCR\Component Categories,您会发现一些类型组件的GUID,例如0DE86A57-2BAA-11CF-A229-00AA003D7352,被描述为“类实现IPersistPropertyBag”。一个coclass在其CLSID\{guid}\Implemented Categories中声明了相同的GUID。这似乎很适合您的情况。
您需要选择一个GUID并告诉组件作者。他们必须在安装程序中编写Implemented Categories键。
仍然需要通过CLSID键进行繁琐的操作,您不想经常这样做。但至少您不必加载DLL来发现接口,这可能会产生各种不良副作用。我建议您在选项菜单中添加一个对话框,让用户启动扫描并进行选择,这也是禁用行为不当组件的好方法。
顺便说一句,这可能会导致支持方面的麻烦,通常使应用程序从“已批准”列表中工作。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接