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

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

ID:25306950

大小:68.00 KB

页数:8页

时间:2018-11-19

c++类的动态组件化技术_第1页
c++类的动态组件化技术_第2页
c++类的动态组件化技术_第3页
c++类的动态组件化技术_第4页
c++类的动态组件化技术_第5页
资源描述:

《c++类的动态组件化技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C++类的动态组件化技术atlassert(succeeded(hresult));hresult=pobj->queryinterface(iid_idefine,(void**)ppinterface);atlassert(succeeded(hresult));if(hresult==s_ok)pobj->link2cppobj(pcppobj,*ppinterface);}}4.接口的继承与多态c++类的继承应用十分广泛,动态化后的组件应该保留原c++类之间的继承关系。在我们的技术方案

2、中,c++类和接口一一对应,c++类的继承关系也应该体现在各个接口上,如下图所示:4.1.支持继承的系列atl模板基类实现接口继承的实质是为派生atl类添加基接口,而为一个atl类添加接口的实质则是:l修改idl文件,体现接口的继承关系l在atl类中提供接口实现修改idl文件很简单,只需要更改派生接口的基接口即可。lOcALhOst在atl类中添加基接口的实现倒颇费思量,我们的做法是:l扩展atl模板基类的意义,每一个atl组件类都对应一个模板基类,都从该模板基类派生l派生类的模板基类,从基类的模板基类中派生;ccpp

3、2atltemplatebase是模板派生树的根节点,所有的模板都派生自ccpp2atltemplatebasel所有的接口方法,都在对应的模板基类中实现atl派生类继承自它对应的模板基类,这个模板基类又继承自atl基类对应的模板基类,而在atl基类的模板基类中提供了基接口的实现。所以,atl派生类最终继承了基接口的实现。c++类、atl类、各模板基类的继承关系如下图所示:假定ibaseitf是基接口,iinherititf是派生接口。atl基类对应的模板基类定义如下:/************************

4、****************************************************模板类catlbaseitf,提供了ibaseitf的实现,用于将ibaseitf接口作为基接口共供其它接口继承****************************************************************************/template<classt,classq,constiid*piid,constguid*plibid=cmodule::m_libid>

5、classatl_no_vtablecatlbaseitf:publicccpp2atltemplatebase<t,q,piid,plibid>{public://基接口方法“basefunc”,在此模板类内实现stdmethod(basefunc)(){m_pcppobj->basefunc();returns_ok;}};atl派生类对应的模板基类定义如下:/*********************************************************************

6、*******模板类catlinherititf,继承了基接口ibaseitf方法的实现,同时提供了iinherititf的实现,可以将iinherititf接口作为基接口共供其它接口继承****************************************************************************/template<classt,classq,constiid*piid,constguid*plibid=cmodule::m_libid>classatl_no_vt

7、ablecatlinherititf:publiccatlbaseitf<t,q,piid,plibid>{public://派生接口方法“inheritfunc”,在此模板类内实现stdmethod(inheritfunc)(){m_pcppobj->inheritfunc();returns_ok;}};更改iinherititf接口的idl定义:[object,uuid(8f3902df-da55-4802-ab8a-958aff45b2f4),dual,helpstring("ibaseitf

8、interface"),pointer_default(unique)]//基接口从icppobjseeker派生interfaceibaseitf:icppobjseeker{[id(1),helpstring("ibaseitfmethod")]hresultbasefunc();};[object,uuid(afebd472

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。