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

  实现代码如下所示:

class CCPP2ATLObjBase

{

       CCPP2ATLObjBase ();

public:

       // IUnknown指针,反指向封装该CPP类的接口

       IUnknown*    m_pAssociATLUnk;

protected:

       virtual ~ CCPP2ATLObjBase ();

};

CCPP2ATLObjBase::CCPP2ATLObjBase()

{

       // 将IUnknown指针初始化为0

       m_pAssociATLUnk = NULL;

}

CCPP2ATLObjBase::~CCPP2ATLObjBase()

{

       // CPP类的对象析构时,Release对接口的引用

       if (m_pAssociATLUnk)

              m_pAssociATLUnk->Release();

}

然后,修改现有各个C++类,使之从CCPP2ATLObjBase派生,如下面代码片断所示:

class CImplement : public CCPP2ATLObjBase

{

       ……

};

  必须指出的是,在CCPP2ATLObjBase基类中,我们设置的m_pAssociATLUnk变量存在和现有C++类成员命名冲突的问题。但是,考虑到原C++类并没有组件特性,也应该不会有“IUnknown”型指针,因此,只要各个类的变量命名都按照规范的命名法,出现这种名字冲突的可能性是极小的。

  2.5. ATL模板基类

  通过以上分析,我们发现,所有的ATL组件类都需要实现一些相同的功能:

  l 保留一个指向其绑定C++对象的指针

  l 提供一个Link2CPPObj函数

  l 在构造函数中创建一个绑定C++类的对象

  为了减化编码,我们定义一个带参数的模板基类,实现上述公共功能,模板参数就是绑定的C++类。然后,所有的ATL组件类都从模板基类中派生。现在的技术方案如下图所示:

  

C++类的动态组件化技术

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