ATL接口映射宏详解(下)

ATL接口映射宏详解(下)

ID:42769796

大小:49.50 KB

页数:11页

时间:2019-09-21

ATL接口映射宏详解(下)_第1页
ATL接口映射宏详解(下)_第2页
ATL接口映射宏详解(下)_第3页
ATL接口映射宏详解(下)_第4页
ATL接口映射宏详解(下)_第5页
资源描述:

《ATL接口映射宏详解(下)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、ATL接口映射宏详解(下)五.COM_INTERFACE_ENTRY_AGGREGATE(iid,punk)参ATL例程COMMAP这一节中将介绍ATL中用于聚集对象的宏。聚集对象的概念请参阅其它参考书。现在先看一看这个宏的典型用法:classCAgg:publicIDispatchImpl,publicISupportErrorInfo,publicCComObjectRoot,publicCComCoClass

2、LSID_CAgg>{.....};CAgg是一个聚集类,它的实现与一般的ATL组件没有区别,只是注意在它的类定义中不要加入DECLARE_NO_AGGREGATABLE.classCOuter:publicCChainBase,publicIDispatchImpl,publicCComCoClass{HRESULTFinalConstruct();voidFinalRelea

3、se();BEGIN_COM_MAP(COuter)COM_INTERFACE_ENTRY_AGGREGATE(IID_IAgg,m_pUnkAgg.p)END_COM_MAP()DECLARE_GET_CONTROLLING_UNKNOWN()CComPtrm_pUnkAgg;};COuter包含了聚合组件CAgg,它包含了几个不同之处:(1)加入了COM_INTERFACE_ENTRY_AGGREGATE(IID_IAgg,m_pUnkAgg.p)宏。#defineCOM

4、_INTERFACE_ENTRY_AGGREGATE(iid,punk){&iid,(DWORD)offsetof(_ComMapClass,punk),_Delegate},offsetof我们在上一节中已经见过,可以猜到它求的就是punk在类中的位置。也就是m_pUnkAgg在COuter中的位置。(2)加入了宏DECLARE_GET_CONTROLLING_UNKNOWN(),其定义为:#defineDECLARE_GET_CONTROLLING_UNKNOWN()public:v

5、irtualIUnknown*GetControllingUnknown(){returnGetUnknown();}我们也没必要继续深究下去,仅从字面意思就可以看出这个函数将返回组件的IUnknown指针。(3)在COuter中加入一个成员变量:CComPtrm_pUnkAgg;m_pUnkAgg将用于获得被聚集组件的IUnknown指针。(4)重载了FinalConstruct,FinalReleaseHRESULTCOuter::FinalConstruct(){IUn

6、known*pUnkOuter=GetControllingUnknown();HRESULThRes=CoCreateInstance(CLSID_CAgg,pUnkOuter,CLSCTX_ALL,IID_IUnknown,(void**)&m_pUnkAgg);returnhRes;}voidCOuter::FinalRelease(){m_pUnkAgg.Release();.....}当创建组件COuter后将会调用FinalConstruct,所以会在这里创建聚集组件。原则上聚集组件

7、可以仅在需要的时候才创建,但也可以随着包含它的组件一起创建。聚集组件的创建没什么特别之处,只是要注意它将查询IUnknown指针,并返回给m_pUnkAgg.外部组件将通过m_pUnkAgg操作聚集组件。另外注意到使用pUnkOuter作为CoCreateInstance的参数,这将导致创建CComAggObject对象,内部包含一个CComContainedObject的包含对象。与上一节中的CComCachedTearOff<>类似,CComAggObject

8、也不是从COuter派生的,所以真正的组件对象不是CComAggObject对象,而是它内部包含的CComContainedObject对象。同样pUnkOuter得到的将是CComAggObject<>的IUnknown指针,也同样调用它的QueryInterface会转而调用CComContainedObject的_InternalQueryInterface函数(呵呵,现在可都还是我猜的,看我猜的对不对吧)运行pOuter->QueryInterface(I

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

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

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