青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-6  評論-0  文章-16  trackbacks-0

??????有了CComObjectRootBase、CComObjectRootEx和線程模型特征類這些基礎原料,CComObject和它的伙伴們便可以自由的發(fā)揮它們的想象了。

1.CComObject —— 普通堆對象??????
???下面是精簡的CComObject模板類的定義:??????

template? < class ?Base >
class ?CComObject?:? public ?Base
{
public :
????CComObject(
void * ? = ?NULL)? throw ()
????{
????????_pAtlModule
-> Lock();
????}
????
????virtual ? ~ CComObject()? throw ()
????{
????????FinalRelease();
??????? _pAtlModule -> Unlock();
????}
????
??? STDMETHOD_(ULONG,?AddRef)()?{ return ?InternalAddRef();}
????STDMETHOD_(ULONG,?Release)()
????{
????????ULONG?l?
= ?InternalRelease();
????????
if ?(l? == ? 0 )
????????????delete?
this ;
????????
return ?l;
????}
????
????STDMETHOD(QueryInterface)(REFIID?iid,? void ? ** ?ppvObject)? throw ()
????{
return ?_InternalQueryInterface(iid,?ppvObject);}
????

????
static ?HRESULT?WINAPI?CreateInstance(CComObject < Base >** ?pp)? throw ();
};


“普通堆對象”是使用最為頻繁的類,它有如下特征:
(1)在堆中分配內存 —— 計數歸零時用delete銷毀
(2)支持獨立存在的對象 —— 使用InternalXXX來實現(xiàn)IUnknown功能
(3)產生時鎖定服務器,銷毀時解鎖服務器 —— 適用于大多數COM對象

2. CComAggObject —— 被聚合堆對象

template? < class ?contained >
class ?CComAggObject?:
????
public ?IUnknown,
????
public ?CComObjectRootEx < ?typename?contained::_ThreadModel::ThreadModelNoCS? >
{
public :
????CComAggObject(
void * ?pv)?:?m_contained(pv)
????{
????????_pAtlModule
-> Lock();
????}
????
HRESULT?FinalConstruct()
????{
????????CComObjectRootEx
< contained::_ThreadModel::ThreadModelNoCS > ::FinalConstruct();
????????
return ?m_contained.FinalConstruct();
????}
????
void ?FinalRelease()
????{
????????CComObjectRootEx
< contained::_ThreadModel::ThreadModelNoCS > ::FinalRelease();
????????m_contained.FinalRelease();
????}
???
? virtual ? ~ CComAggObject()
????{
???????
?FinalRelease();
????????_pAtlModule -> Unlock();
????}

????STDMETHOD_(ULONG,?AddRef)()?{
return ?InternalAddRef();}
????STDMETHOD_(ULONG,?Release)()
????{
????????ULONG?l?
= ?InternalRelease();
????????
if ?(l? == ? 0 )
????????????delete?
this ;
????????
return ?l;
????}
????STDMETHOD(QueryInterface)(REFIID?iid,?
void ? ** ?ppvObject)
????{
????????HRESULT?hRes? = ?S_OK;
????????
if ?(InlineIsEqualUnknown(iid))
????????{
????????????
* ppvObject? = ?( void * )(IUnknown * ) this ;
????????????AddRef();
????????}
????????
else
????????????hRes?
= ?m_contained._InternalQueryInterface(iid,?ppvObject);
????????
return ?hRes;
????}
???
? static ?HRESULT?WINAPI?CreateInstance(LPUNKNOWN?pUnkOuter,?CComAggObject < contained >** ?pp);

????CComContainedObject
< contained > ?m_contained;
};


? CComAggObject有如下特征:
(1)在堆中分配內存
(2)支持被聚合聚合的對象
???????????實現(xiàn)了兩份IUnknown:CComAggObject實現(xiàn)了內部聚合類真正的IUnknown,它管理對象的生存期,并且完成接口查詢(通過contained對象的_InternalQueryInterface);contained對象實現(xiàn)了具有轉發(fā)功能的IUnknown,它將所有的調用轉發(fā)給CComAggObject在構造函數中收到的外部IUnknown指針。
(3)產生時鎖定服務器,銷毀時解鎖服務器

3. CComTearOffObject —— tear-off 對象

template? < class ?Base >
class ?CComTearOffObject?:? public ?Base
{
public :
????CComTearOffObject(
void * ?pv)
????{
????????m_pOwner? = ?reinterpret_cast < Base::_OwnerClass *> (pv);
????????m_pOwner
-> AddRef();
????}
???? ~ CComTearOffObject()
????{
????????FinalRelease();
????????m_pOwner -> Release();
????}

????STDMETHOD_(ULONG,?AddRef)()?
throw ()?{ return ?InternalAddRef();}
????STDMETHOD_(ULONG,?Release)()?
throw ()
????{
????????ULONG?l?
= ?InternalRelease();
????????
if ?(l? == ? 0 )
????????????delete?
this ;
????????
return ?l;
????}
????STDMETHOD(QueryInterface)(REFIID?iid,?
void ? ** ?ppvObject)? throw ()
????{
????????
return ?m_pOwner -> QueryInterface(iid,?ppvObject);
????}
};

???tear-off對象有如下特征:
(1)在堆中分配內存
(2)支持在ATL組件內部使用的tear-off技術
(3)生成時鎖定父對象,銷毀時解鎖父對象
(4)生命周期由自己管理,接口查詢委托父對象

4. CComObjectStack —— 棧對象
???
template?<class?Base>
class?CComObjectStackEx?:?public?Base
{
public:
????CComObjectStackEx(
void*?=?NULL)?
????{?
????????m_hResFinalConstruct?=?FinalConstruct();?
????}
????
virtual?~CComObjectStackEx()
????{
???????
FinalRelease();
??? }

????STDMETHOD_(ULONG,?AddRef)()
????{
??????? return?0;
????}

????STDMETHOD_(ULONG,?Release)()
????{
????????return?0;
????}

????STDMETHOD(QueryInterface)(REFIID?iid,?
void?**?ppvObject)
????{
????????
return?_InternalQueryInterface(iid,?ppvObject);
????}

????HRESULT?m_hResFinalConstruct;
};

???棧對象有如下特征:
(1)內存分配于棧上 —— 不需要對象考慮釋放問題
(2)無引用計數功能
(3)構造時初始化 —— 需要在構造函數調用后檢查m_hResFinalConstruct,以判斷對象是否構造成功
(4)不鎖定服務器

5. CComObjectGlobal —— 全局對象
template?<class?Base>
class?CComObjectGlobal?:?public?Base
{
public:
????CComObjectGlobal(
void*?=?NULL)
????{
???????
m_hResFinalConstruct?=?FinalConstruct();
????}
????
virtual?~CComObjectGlobal()
????{
?????????????FinalRelease();
??
??}
????STDMETHOD_(ULONG,?AddRef)()?
throw()
????{
????????
return?_pAtlModule->Lock();
????}
????STDMETHOD_(ULONG,?Release)()?
throw()
????{
????????
return?_pAtlModule->Unlock();
????}
????STDMETHOD(QueryInterface)(REFIID?iid,?
void?**?ppvObject)?throw()
????{
????????
return?_InternalQueryInterface(iid,?ppvObject);
????}
????HRESULT?m_hResFinalConstruct;
};
???
???全局對象有如下特征:
(1)在全局數據區(qū)分配內存
(2)初始化時不鎖定服務器,引用計數變化時才鎖定或者解鎖服務器,這使得全局對象可以被用于全局類廠對象,以解決服務器和類廠之間的死鎖問題
(3)構造方式同棧對象

???還有一些其它種類的生存期管理類,如CComObjectNoLock、CComObjectCached、CComPolyObject等等,它們也都有自己獨到的用處,我們也可以根據自己的需要編寫自定義的類。總之CComObjectRootBase、CComObjectRootEx和線程模型特征類就像是積木一樣,我們可以任意的把它們組合成想要的形狀。
posted on 2007-04-06 15:33 michael 閱讀(3723) 評論(0)  編輯 收藏 引用 所屬分類: 心得
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产日韩在线亚洲字幕中文| 亚洲第一精品夜夜躁人人爽| 欧美不卡视频一区发布| 一区二区三区在线观看欧美| 欧美性感一类影片在线播放| 欧美日韩免费看| 欧美日韩视频一区二区| 欧美三区在线| 国产亚洲一级| 一区二区三区在线视频免费观看 | 亚洲毛片在线| 韩国免费一区| 国产精品色婷婷| 国产一区二区日韩精品欧美精品| 国产精品hd| 欧美韩日视频| 亚洲影院免费| 欧美精品 日韩| 国产视频在线观看一区二区三区 | 亚洲人成人一区二区三区| 亚洲精品免费网站| 久久精品国产99国产精品| 亚洲国产精品视频| 久久精品人人| 国产精品sss| 亚洲精品久久久久久久久| 欧美在线999| 一区二区三区四区五区精品视频 | 国产在线欧美| 亚洲一区二区三区中文字幕 | 亚洲免费网址| 亚洲激情女人| 欧美日韩一区二区免费视频| 狠狠色丁香久久综合频道| 亚洲欧美成人一区二区在线电影| 欧美成人一区在线| 久久精品亚洲精品| 亚洲国产成人久久综合| 蜜臀久久99精品久久久久久9| avtt综合网| 亚洲国产婷婷综合在线精品| 久久精品首页| 在线成人av网站| 欧美精品在线一区二区三区| 在线一区二区视频| 亚洲欧美国产另类| 国产字幕视频一区二区| 牛夜精品久久久久久久99黑人| 久久国产一二区| 亚洲国产精品久久| 亚洲乱码精品一二三四区日韩在线 | 亚洲男人天堂2024| 在线亚洲观看| 亚洲电影欧美电影有声小说| 亚洲蜜桃精久久久久久久| 欧美日韩久久不卡| 欧美在线观看一区二区| 蜜桃av一区二区在线观看| 亚洲系列中文字幕| 久久亚洲视频| 欧美中文在线观看| 欧美日韩一区二区欧美激情| 久久精品中文字幕免费mv| 欧美天堂亚洲电影院在线观看| 久久久一区二区| 国产伦精品一区二区三区在线观看 | 欧美日韩三级| 欧美黄色大片网站| 国语对白精品一区二区| 午夜免费在线观看精品视频| 欧美日韩精品免费观看视一区二区 | 欧美一区二区福利在线| 亚洲视频一起| 欧美日韩欧美一区二区| 亚洲欧美日韩网| 黄色成人片子| 久久久久青草大香线综合精品| 欧美亚洲一区| 国产麻豆9l精品三级站| 午夜精品久久久久久久99水蜜桃 | 亚洲一区在线播放| 欧美午夜美女看片| 一本久久a久久精品亚洲| 日韩香蕉视频| 欧美日韩国产首页| 欧美一级免费视频| 美女福利精品视频| 一本大道久久精品懂色aⅴ| 国产精品第一页第二页第三页| 亚洲国产黄色片| 亚洲影院免费| 欧美激情精品久久久久久大尺度| 亚洲国产经典视频| 久久久99精品免费观看不卡| 国产在线乱码一区二区三区| 欧美激情综合色综合啪啪| 午夜国产精品影院在线观看| 欧美激情一区二区三区在线视频观看 | 在线成人www免费观看视频| 先锋影音国产精品| 亚洲三级毛片| 久久久www成人免费精品| 亚洲视频在线播放| 在线观看欧美日韩国产| 国产亚洲精品成人av久久ww| 久久亚洲春色中文字幕| 久久精品国产免费| 香蕉免费一区二区三区在线观看| 欧美日韩亚洲综合| 欧美日韩色婷婷| 欧美激情女人20p| 欧美夫妇交换俱乐部在线观看| 久久久久国产一区二区| 欧美影院精品一区| 久久久女女女女999久久| 久久精品一二三| 欧美69视频| 欧美日韩专区在线| 国产精品揄拍500视频| 国产日韩欧美另类| 国内外成人在线视频| 在线播放亚洲| 91久久久久| 欧美伊人久久久久久午夜久久久久 | 又紧又大又爽精品一区二区| 在线不卡免费欧美| 亚洲一区二区三区免费观看 | 国产一区二区三区高清| 国产一区二区三区视频在线观看 | 欧美一级午夜免费电影| 久久精品日韩| 欧美人与性动交cc0o| 国产婷婷一区二区| 亚洲精品国久久99热| 亚洲欧美视频在线| 欧美aa在线视频| 性欧美xxxx大乳国产app| 久久久噜噜噜久久狠狠50岁| 欧美日韩免费在线视频| 黄色成人av在线| 欧美中文字幕在线观看| 亚洲精品在线观| 免费中文字幕日韩欧美| 国产婷婷97碰碰久久人人蜜臀| 日韩亚洲成人av在线| 欧美96在线丨欧| 欧美波霸影院| 亚洲精品黄色| 亚洲黄色精品| 欧美精品在线观看播放| 99国产精品久久久久久久久久| 麻豆精品国产91久久久久久| 欧美一区二区三区精品电影| 国产精品久久久久免费a∨| 亚洲女人天堂av| 亚洲色图综合久久| 国产欧美va欧美不卡在线| 欧美在线一二三区| 欧美一区二区久久久| 国产欧美一区二区色老头 | 亚洲无玛一区| 一区二区三区毛片| 国产精品美女一区二区在线观看| 亚洲午夜久久久久久尤物| 亚洲女性喷水在线观看一区| 国产一区二区三区久久精品| 欧美国产免费| 国产精品网站在线观看| 欧美成熟视频| 国产精品嫩草影院av蜜臀| 国产欧美精品va在线观看| 欧美一区=区| 久色成人在线| 亚洲在线观看视频| 欧美成人综合在线| 久久久福利视频| 欧美日韩一区成人| 亚洲第一在线综合在线| 国产精品久久夜| 亚洲精品国产精品国自产观看浪潮| 国产女人精品视频| 一本色道久久加勒比精品| 亚洲国产裸拍裸体视频在线观看乱了中文| 一区二区三区高清不卡| 91久久线看在观草草青青| 欧美一区二区三区在线播放| 亚洲欧美在线磁力| 国产精品久久网站| 在线综合视频| 欧美影院视频| 国内成+人亚洲| 久久夜色精品国产欧美乱| 久久婷婷影院| 亚洲精品综合在线| 欧美日本免费| 欧美一区二区三区精品| 久久久亚洲高清| 亚洲肉体裸体xxxx137| 欧美日韩99| 午夜精品福利视频|