ATL COM对象的基本知识

用于定义ATL COM对象的下图演示对选件类之间的关系和接口。

ATL 结构

备注

此关系图表示,CComObjectCYourClass 派生,而 CComAggObjectCComPolyObject 包括 CYourClass 作为成员变量。

有三种定义ATL COM对象。 标准选项是使用从 CYourClass派生的 CComObject 选件类。 第二个选项是创建聚合的对象使用 CComAggObject 选件类。 第三种方法是使用 CComPolyObject 选件类。 CComPolyObject 为混合:它可以作为 CComObject 选件类或作为 CComAggObject 选件类,根据如何首次创建。 有关如何使用 CComPolyObject 类的更多信息,请参见 CComPolyObject选件类

当您使用标准ATL COM时,可以使用两个对象:一个外部对象和内部对象。 外部客户端访问内部对象的函数通过在外部对象定义的包装函数。 外部对象是类型 CComObject

在将聚合的对象时,外部对象为内部对象的函数不提供包装。 相反,外部对象提供由外部客户端直接访问的指针。 在此方案中,外部对象是类型 CComAggObject。 内部对象是外部对象的成员变量,因此,为类型 CYourClass

由于客户端不必通过外部对象与内部对象进行交互,合成对象通常更高效。 此外,外部对象不需要知道合成对象的功能,假定合成对象的接口直接客户端可使用。 但是,并非所有对象都可以聚合。 对于要聚合的对象,它需要设计记住摘要。

在两个阶段的ATL实现 IUnknown :

您的ATL COM对象的其他方面由其他选件类处理:

  • CComCoClass 定义对象的默认选件类工厂和摘要模型。

  • IDispatchImpl 在对象提供所有双重接口的 IDispatch Interface 部分的默认实现。

  • ISupportErrorInfoImpl 实现相应的接口 ISupportErrorInfo 错误信息能准确传播调用链。

本节内容

相关章节

  • 创建ATL项目
    提供有关创建ATL COM对象的信息。

  • ATL
    使用活动模板库提供一些链接,指向有关概念性主题有关如何使用进行编程。

请参见

其他资源

ATL概念