ATL提供了一种分层实现IUnknown的方法,CComXXXThreadModel类表示的最上层,为存放在STA和MTA中的对象所要求的同步提供了“辅助函数”®1和“类型定义”®2。第二层是CComObjectRootEx,他利用线程模型类来支持恰好的“线程安全”的AddRef和Release实现以及对象级的锁定,他的基类是CComObjectRootBase。在“我们的类”®3中使用“
相关宏”®4建立了一个接口映射表。CComObjectRootBase利用这个接口映射表建立了一个表驱动的QueryInterface实现。最后一层由CComObject或者其他类似的类®5提供,他们根据对象的生命周期和实体身份的要求提供QI、AddRef、Release的实现。
为了允许每个类都可以定义自己的生命周期和实体身份,每个类定义自己的_CreatorClass®6来定义适当的创建者。
-----------------------------------------------------------------------------------------------------------------------
名词解释:
®1、指Increment、Decrement两个函数的定义。
®2、指CComXXXThreadModel定义中的几个typedef。
®3、指从CComObjectRootEx和任意数量的接口派生,并且提供接口成员函数的实现(不包括IUnknown的几个虚函数实现)的类。
®4、类似这样:
BEGIN_COM_MAP(Cxx)
COM_INTERFACE_ENTRY(Ixx)
END_COM_MAP()
这几个宏建立了接口映射表。
®5、这些类主要根据生命周期和实体身份提供IUnknown接口的虚函数。
®6、我们的类从一个CComCoClass派生,在CComCoClass类中,typedef了创建者的类型定义。如DECLARE_AGGREGATABLE(T)
posted on 2006-05-02 23:36 莫问春秋 阅读(811)
--------------------next---------------------
阅读(259) | 评论(0) | 转发(0) |