转储COM对象公开的接口

时间:2009-12-02 08:48:17

标签: com activex

我想找到一个可以看到所有界面的工具,包括COM(或ActiveX)组件公开的方法,属性,事件。这样的工具可用吗?

2 个答案:

答案 0 :(得分:5)

实际上不可能为任何COM对象构建这样的工具,您可能会对特定对象有所帮助。如果类型库可用,那么您可以使用OLEView,或者您可以以编程方式打开和遍历类型库本身。请记住,类型库的内容正是开发人员想要包含在其中的内容;没有什么可以阻止实现更多接口的对象,而不是类型库所说的。

对于没有类型库的对象,不可能生成通用工具:

  • 鉴于QueryInterface的工作方式,如果支持每个可能的接口,您将不得不询问正在调查的对象。这样的工具在哪里获得有关对象可以支持的所有可能接口的列表?虽然由于代理要求而在注册表中注册了某些接口,但并非所有接口都是正确的,并且它们绝不是要求它们。
  • 一旦您知道某个对象支持给定的接口,您如何计算出该接口支持的方法?如果接口派生自IDispatch,那么这是可能的,因为这是IDispatch的目的,但对于从IUnknown派生的接口,无法以编程方式发现有关接口的内容。

您还遇到一个问题,即某些对象可能具有代理层为其实现的其他接口,例如,如果接口已经过代理,那么您也可以QueryInterface从它IProxyManager虽然对象本身没有实现这个接口(它是代理的一部分)。

答案 1 :(得分:3)

如果组件具有typelib(在资源中或单独提供),则可以使用Visual Studio附带的OLE View。您应该使用“View Typelib”,而不是“绑定到文件”。