[英]How To Enumerate All coclasses That Implement A Particular COM Interface?
我将尽可能简单地描述问题;
假设我们有一个定义了几个接口的com客户端。
为了改善我们的com客户端的功能; 几家独立公司开发和部署实现该接口的com服务器。 目标计算机可能具有实现相同接口的com服务器。
现在问题在于此;
我们的com客户端不知道目标机器上的com服务器,因为它们是独立开发的。 但是,我们仍然可以要求独立公司遵循特定的安装程序。
现在问题是这样的;
我们应该使用什么样的技术来找出部署在目标机器上的所有兼容的com服务器,然后实例化所需的对象?
我知道没有标准的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来发现接口,这可能会产生各种令人讨厌的副作用。 我建议在“选项”菜单中选择一个对话框,让用户开始扫描并选择,这也是禁用行为不当组件的好方法。
顺便说一下,这可能导致的支持性疼痛通常会使应用程序在“已批准”列表中运行。
汉斯有个好主意。
我之前没有使用过组件类别,但我建议您不要直接触摸注册表,因为MS提供了访问组件类别的API。 看一下这个:
http://msdn.microsoft.com/en-us/library/ms692551(v=vs.85).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.