ATL对COM实体身份的支持(二)—— CComObjectRootBase

ATL对COM实体身份的支持(二)—— CComObjectRootBase

下面是CComObjectRootBase的关键代码:

class  CComObjectRootBase
{
public :
     // 构造支持
     //
  
    HRESULT FinalConstruct();
     void  FinalRelease(); 

     //  接口查询支持
     //
      static  HRESULT WINAPI InternalQueryInterface( void *  pThis,
        
const  _ATL_INTMAP_ENTRY *  pEntries, REFIID iid,  void **  ppvObject);
   
    static HRESULT WINAPI _Break(void*, REFIID iid, void**  , DWORD_PTR );
    static HRESULT WINAPI _NoInterface(void*  , REFIID void**  , DWORD_PTR );
    static HRESULT WINAPI _Creator(void* pv, REFIID iid, void**ppvObject, DWORD_PTR dw);
    static HRESULT WINAPI _Delegate(void* pv, REFIID iid, void** ppvObject, DWORD_PTR dw);
   
 static HRESULT WINAPI _Chain(void* pv, REFIID iid, void** ppvObject, DWORD_PTR dw);
   
static HRESULT WINAPI _ChainAttr(void* pv, REFIID iid, void** ppvObject, DWORD_PTR dw);
   
 static HRESULT WINAPI _Cache(void* pv, REFIID iid, void** ppvObject, DWORD_PTR dw);

    //  聚合支持
    //
 
    ULONG OuterAddRef()
    {
        
return  m_pOuterUnknown -> AddRef();
    }
    ULONG OuterRelease()
    {
        
return  m_pOuterUnknown -> Release();
    }
    HRESULT OuterQueryInterface(REFIID iid, 
void   **  ppvObject)
    {
        
return  m_pOuterUnknown -> QueryInterface(iid, ppvObject);
    }
    
    // 实体身份支持
    //
    union
    {
        
long  m_dwRef;
         IUnknown
*  m_pOuterUnknown;
    };
};

CComObjectRootBase主要功能分为:
(1)构造支持:
            即FinalConstruct和FinalRelease,它们用于安全的构造和销毁对象。
(2)接口查询支持
            通过接口映射表来完成接口查询功能,详细内容见后面的文章。
(3)聚合状态下引用计数操作的支持
            提供了将IUnknown请求委托给外部组件的支持。当对象独立存在时,对引用计数操作的支持被放置于CComObjectRootEx中,因为涉及到了套间和访问同步。
(4)实体身份支持
            使得对象可以独立存在或者被聚合,因为运行时刻对象只能以一种方式存在,所以使用了union。

你可能感兴趣的:(ATL对COM实体身份的支持(二)—— CComObjectRootBase)