繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM