【问题标题】:Dump the interface exposed by a COM object转储 COM 对象公开的接口
【发布时间】:2009-12-03 14:13:11
【问题描述】:

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

【问题讨论】:

    标签: com activex


    【解决方案1】:

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

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

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

    您还有一个额外的问题,即某些对象可能具有由代理层为它们实现的附加接口,例如,如果一个接口已被代理,那么您也可以将QueryInterface 从它转到IProxyManager对象本身没有实现这个接口(它是代理的一部分)。

    【讨论】:

      【解决方案2】:

      如果组件具有类型库(在资源中或单独提供),您可以使用 Visual Studio 附带的 OLE 视图。你应该在那里使用“View Typelib”,而不是“Bind to File”。

      【讨论】:

      • 谢谢,但在 OLE 查看器中,我只能看到接口,而看不到该接口中公开的函数名称。我想要的是更详细的信息。
      • 不,您会看到 typelib 中包含的所有内容。现在它取决于生成该类型库的应用程序的设置,其中包含的内容。例如,如果您使用 MIDL 解析包含标记为 [dual] 的接口的 IDL 文件,那么也会包含完整的函数签名。
      • 谢谢。我正在使用 VS.NET 生成所有信息,有什么步骤可以生成完整的函数签名吗?
      • 哦,我认为您的意思是 Ole Viewer 中的“查看 Typelib”菜单项!是的,我现在可以看到函数定义了,谢谢!
      • 我发现有必要以管理员身份运行 OLE View。
      猜你喜欢
      • 2011-06-27
      • 1970-01-01
      • 2012-04-03
      • 2010-11-13
      • 1970-01-01
      • 2010-09-07
      • 2014-01-16
      • 1970-01-01
      • 2014-01-06
      相关资源
      最近更新 更多