首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

ATL源码学习2---聚合的支持

1.COM组件聚合由来      聚合源自组件重用。当有两个组件A和B,他们分别实现了自己的接口IA和IB。如果有 一个客户程序创建了A对象使得自己可以调用IA的方法,但同时又想获得IB的接口,调用IB的方法。这时候有两种做法:一种是客户程序创建B对象,还有一 种方法是A组件内部创建B组件,然后客户通过某种途径调用B的接口方法。      第一种方法,使得客户必须知道有独立的B组件的存在,第二种方法客户可以认为只有一个组件A,组件A实现了两个接口IA和IB。第二种方法可以制造出一种假象,让客户程序编写更加简单。从组件A如何管理组件B的方法上,第二种方法还可以分为两种:包容和聚合。 包容很简单,如果组件IB接口拥有一个方法PrintB(),那么A组件就要实现一个自己的IB_A接口,并实现IB_A::PrinB( )方法,内部调用IB:: PrinB ()方法。      聚合通常用于IB接口的功能完全不需要做任何的修改,就可以直接交给用户使用的情况。 这时候,如果IB接口的方法很多,包容就显得很笨拙。因为它不得不对每一个方法作一次包装,尽管什么都不做。聚合方式下,A组件直接将IB接口交给客户,客户就可以调用,但是客户仍然以为是A组件实现了IB接口。 2. ATL对聚合的内部组件的支持 ATL通过CComCreator2模板类以及和聚合相关的宏来支持聚合。 CComCreator2的定义:

02

2020.2.14日报:IE双核模式下,hook另外个地方解决卡慢

ntdll!memcpy+0x33 ntdll!RtlpReAllocateHeap+0x9d9 (FPO: [Non-Fpo]) ntdll!RtlReAllocateHeap+0x2c5 (FPO: [Non-Fpo]) kernel32!GlobalReAlloc+0x17f (FPO: [Non-Fpo]) ole32!CMemBytes::SetSize+0x2a (FPO: [Non-Fpo]) (CONV: stdca ole32!CMStream::SetSize+0x72 (FPO: [Non-Fpo]) (CONV: thisca ole32!CDirectStream::SetSize+0x285 (FPO: [Non-Fpo]) (CONV:  ole32!CMStream::SetMiniSize+0x49 (FPO: [Non-Fpo]) (CONV: th ole32!CDirectStream::SetSize+0x274 (FPO: [Non-Fpo]) (CONV:  ole32!PSStream::SetSize+0x19 (FPO: [Non-Fpo]) (CONV: thisca ole32!CPubStream::SetSize+0x52 (FPO: [Non-Fpo]) (CONV: this ole32!CExposeadStream::SetSize+0x62 (FPO: [Non-Fpo]) (CONV: MSHTML!CStorageHelper::_WriteKeyValuesToStream+0x115 (FPO:  MSHTML!CStorageHelper::Save+0x24 (FPO: [Non-Fpo]) MSHTML!CStorageListHelper::Save+0xb8 (FPO: [Non-Fpo]) MSHTML!CDoc::SetupDwnBindInfoAndBindCtx+0x677 (FPO: [Non-Fp MSHTML!CDoc::FollowHyperlink2+0x3b9 (FPO: [30,27,4]) MSHTML!CWindow::SuperNavigateInternal+0x20c (FPO: [12,11,4] MSHTML!CWindow::SuperNavigate3+0x27 (FPO: [Non-Fpo]) le. Following frames may be wrong. ieframe!Ordinal231+0xae8a ieframe!Ordinal231+0xabd0 ieframe!Ordinal231+0xa6e6 ieframe!Ordinal137+0x60bf MSHTML!CTExec+0x38 (FPO: [Non-Fpo]) MSHTML!CMarkup::DoAutoSearch+0x2fb (FPO: [Non-Fpo]) MSHTML!`CBackgroundInfo::Property<CBackgroundImage>'::`7':: MSHTML!`CBackgroundInfo::Property<CBackgroundImage>'::`7':: MSHTML!CBindingFilter::OnStopBinding+0x3d (FPO: [Non-Fpo]) urlmon!CBSCHolder::OnStopBinding+0x3c (FPO: [Non-Fpo]) urlmon!CBinding::CallOnStopBinding+0x3d (FPO: [Non-Fpo]) urlmon!AppDataFolderList::GetPackageDependencyStateForIUri+ urlmon!CBinding::ReportData+0xa2 (FPO: [Non-Fpo]) urlmon!COInetProt::ReportData+0x81 (FPO: [Non-Fpo]) urlmon!CTransaction::DispatchReport+0x171 (FPO: [6,3,4]) urlmon!CTransaction::OnINetCallback+0x140 (FPO: [Non-Fpo]) urlmon!TransactionWndProc+0x28 (FPO: [Non-Fpo]) USER32!gapfnScSendMessage+0x270 USER32!gapfnScSendMessage+0x922 USER32!LoadStringW+0x11f USER32!DispatchMessageW+0xf chrome_child!base

02

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券