C++类的动态组件化技术(5)
作者:佚名; 更新时间:2014-12-05

实现代码如下所示:

template <class T>

class CCPP2ATLTemplateBase :

{

protected:

       // C++类指针

       T*          m_pCPPObj;

       // 标识继承该模板的ATL对象是否由内部维护

       BOOL     m_bInnerManage;

public:

       /**********************************************************

         模板的构造函数,实现如下功能:

         1、new一个C++实现类对象

         2、缺省情况下,ATL对象由外部维护,将内部维护标识设为FALSE

         3、将C++类中对ATL接口的反指指针设置为空

       **********************************************************/

       CAtlCPP2ATLTemplateBase()

       {

              m_pCPPObj = new T;

              m_bInnerManage = FALSE;

              m_pCPPObj->m_pAssociATLUnk = NULL;

       }

       /**********************************************************

         析构ATL对象时,如果该ATL对象是由外部创建的,信捷职称论文写作发表网

         则显式的删除C++对象

         如果ATL对象由内部维护,那么什么事都不用做

       **********************************************************/

       virtual ~CAtlCPP2ATLTemplateBase()

       {

              if (!m_bInnerManage) {

                     if (m_pCPPObj)

                            delete m_pCPPObj;

              }

       }

       /**********************************************************

         Link2CPPObj函数,负责绑定C++对象和ATL接口

         1、删除构造函数中new的C++对象,而使用外部传入的C++对象

         2、将ATL对象的内部维护标识设为TRUE

         3、设置C++基类中的接口指针成员

         4、因为ATL接口传送给外部使用,需要增加引用计数

       **********************************************************/

       virtual void Link2CPPObj(T* pObj, IUnknown* pUnk)

       {

              ASSERT(pObj != NULL);

              ASSERT(pUnk != NULL);

              if (m_pCPPObj)

                     delete m_pCPPObj;

              m_pCPPObj = pObj;

              m_bInnerManage = TRUE;

              m_pCPPObj->m_pAssociATLUnk = pUnk;

              m_pCPPObj->m_pAssociATLUnk->AddRef();

       }

};

然后,每个ATL类都从该模板类派生,如下代码片断所示:

class ATL_NO_VTABLE CATLXX :

       ……,

       // 添加ATL模板基类

       public CCPP2ATLTemplateBase<CImplementXX>

{

       ……

}

核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com