如何找到 ActiveX 控件的接口?

Posted

技术标签:

【中文标题】如何找到 ActiveX 控件的接口?【英文标题】:How to find interfaces of an ActiveX control? 【发布时间】:2011-04-02 14:03:01 【问题描述】:

给定一个 ActiveX 控件的实例,我如何枚举它的接口? (我想获取接口的名称)。

【问题讨论】:

【参考方案1】:

就像其他人提到的那样,唯一的方法是查询所有可能的接口。这正是 Microsoft 工具 OleView 为您所做的。

【讨论】:

【参考方案2】:

不幸的是,COM 不是为此而设计的。在基本的 COM 级别,您只能ask an object whether it supports 一个特定的 UUID 识别接口,一次一个。由于有很多潜在的 UUID,因此以这种方式获得详尽的列表将花费相当多的时间!虽然大多数对象实现会在内部跟踪支持的接口列表,但没有标准的 COM 方法可以从外部访问这些列表。即使有,您也只能通过在注册表中查找其 UUID 来获得接口的编程名称,这并不总是可靠的。

ActiveX objects (a tricky term!) 倾向于通过IDispatch 支持自动化。如果对象表现良好,您将能够通过GetTypeInfo() 支持get some information on the methods。这不会包括方法所属的接口(如果有)的名称。

总而言之,COM 在对象元数据方面相当糟糕。

【讨论】:

感谢您提供非常详细的回答。但是,我正在寻找 Paul 的回答为我提供的实用解决方案,因此我接受了。【参考方案3】:

没办法。 COM 接口背后的想法是您询问对象-“如果您支持它,请给我接口 XYZ)并且对象决定如何响应-提供对自身的引用或公开某些内部对象的接口等。所以你可以'不知道对象“支持”什么接口,而无需如上所述询问对象。这是 COM 设计者的设计决定。

【讨论】:

以上是关于如何找到 ActiveX 控件的接口?的主要内容,如果未能解决你的问题,请参考以下文章

如何开发ActiveX控件

如何删除ActiveX控件

在电脑中Active 是啥?

如何注册ActiveX打印控件

无法注册Flash player 的ActiveX控件啥意思 怎么解决?

与 OLE 服务器或 ActiveX 控件通信