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

隨筆-6  評論-0  文章-16  trackbacks-0
?????????在COM中對象要通過class factory的接口(通常是IClassFactory)來創建。在ATL中,class factory也是從CComObjectRootEx派生的COM類,它跟普通的COM類一樣,也通過CComObject或其同伴類將邏輯功能跟生存期管理分離。
?????????在ATL中,class factory類和普通類對象的創建都可以通過被稱為“創建者”的模板類來創建。
?????????
template?<class?T1>
class?CComCreator
{
public:
????
static?HRESULT?WINAPI?CreateInstance(void*?pv,?REFIID?riid,?LPVOID*?ppv)
????{
????????HRESULT?hRes?=?E_OUTOFMEMORY;
????????T1
*?p?=?NULL;
????????p?
=?new?T1(pv);
????????
if?(p?!=?NULL)
????????{
????????????p
->SetVoid(pv);
????????????p
->InternalFinalConstructAddRef();
????????????hRes?
=?p->FinalConstruct();
????????????
p->InternalFinalConstructRelease();
????????????
if?(hRes?==?S_OK)
????????????????hRes?
=?p->QueryInterface(riid,?ppv);
????????????
if?(hRes?!=?S_OK)
????????????????delete?p;
????????}
????????
return?hRes;
????}
};

?????????“創建者”通過提供一個靜態函數CreateInstance來創建指定類的實例,并且查詢指定的接口。第一個參數在實例化普通對象和class factory對象時會有不同:對于普通對象,通常會傳遞聚合外部對象的IUnknown指針,如果是非聚合創建,可以傳遞NULL(詳見ATL對COM實體身份的支持四);稍后會介紹在class factory創建時第一個參數的用處。
?????????在ATL中,一個class factory對象只能創建一種類型的COM類實例。在class factory的CreateInstance函數中,它不是硬編碼被創建的對象類型,而是通過一個函數指針成員變量來創建它所管理的對象,而這個函數指針指向的通常就是某個COM類的“創建者”類的CreateInstance靜態函數的地址,此地址是在class factory對象被它自身的“創建者”的CreateInstance函數創建時通過第一個參數傳進來的,class factory重新定義了SetVoid函數,并且保存這個地址:
?????????
class?CComClassFactory?:
????
public?IClassFactory,
????
public?CComObjectRootEx<CComGlobalsThreadModel>
{
public:
????
//?IClassFactory
????STDMETHOD(CreateInstance)(LPUNKNOWN?pUnkOuter,?REFIID?riid,?void**?ppvObj)
????{
????????HRESULT?hRes?=?E_POINTER;
????????
if?(ppvObj?!=?NULL)
????????{
????????????
*ppvObj?=?NULL;
????????????if?((pUnkOuter?!=?NULL)?&&?!InlineIsEqualUnknown(riid))
????????????{
????????????????hRes?=?CLASS_E_NOAGGREGATION;
????????????}
????????????
else
????????????????hRes?
=?m_pfnCreateInstance(pUnkOuter,?riid,?ppvObj);
????????}
????????
return?hRes;
????}

????STDMETHOD(LockServer)(BOOL?fLock)
????{
????????
if?(fLock)
????????????_pAtlModule
->Lock();
????????
else
????????????_pAtlModule
->Unlock();
????????
return?S_OK;
????}
?
????void?SetVoid(void*?pv)
????{
????????m_pfnCreateInstance?
=?(_ATL_CREATORFUNC*)pv;
????}

????_ATL_CREATORFUNC
*?m_pfnCreateInstance;
};

?????????根據上面的討論,一個COM類的創建者會像這個樣子:
?????????CComCreator<?CComObject<CMyClass> >
?????????而一個class factory的創建者會像這個樣子:
?????????CComCreator< CComCachedObject<CComClassFactory> >。
?????????
?????????ATL在客戶請求創建CMyClass對象時執行的偽代碼如下:
?????????
typedef?CComCreator<?CComCachedObject<CComClassFactory>?>?CClassFactoryCreator;
typedef?CComCreator
<?CComObject<CMyClass>?>?CMyClassCreator;

IClassFactory
*?pcf=NULL;
CClassFactoryCreator::CreateInstance(
&CMyClassCreator::CreateInstance,__uuidof(IClassFactory),&pcf);
pcf
->CreateInstance(pOuter,__uuidof(IMyInterface),ppvObj);
posted on 2007-04-10 17:36 michael 閱讀(1556) 評論(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>
            99国产麻豆精品| 欧美黄色aaaa| 国产欧美三级| 欧美在线播放一区二区| 亚洲欧美卡通另类91av| 国产精品亚洲一区| 六月天综合网| 欧美国产日韩一区| 亚洲欧美一级二级三级| 欧美影院在线播放| 亚洲黑丝一区二区| 夜夜嗨av色一区二区不卡| 国产精品另类一区| 免费久久99精品国产自| 女主播福利一区| 亚洲欧美视频在线观看| 久久噜噜亚洲综合| 亚洲一区bb| 久久久久久久激情视频| 亚洲一区二区三区久久| 久久成人免费| 亚洲小说区图片区| 久久性天堂网| 亚洲欧美日韩精品久久久| 久久久99国产精品免费| 一区二区三区精品| 久久久噜噜噜久久久| 亚洲天堂男人| 美日韩精品免费| 欧美在线视频一区二区三区| 欧美粗暴jizz性欧美20| 欧美自拍丝袜亚洲| 欧美日韩三级电影在线| 久久亚洲一区| 国产精品久久精品日日| 亚洲国产经典视频| 国产精品嫩草久久久久| 91久久精品久久国产性色也91| 国产亚洲人成a一在线v站| 日韩视频久久| 亚洲精品视频免费| 乱中年女人伦av一区二区| 亚洲狠狠丁香婷婷综合久久久| 日韩亚洲精品在线| 亚洲电影专区| 欧美综合国产精品久久丁香| 亚洲淫片在线视频| 欧美日本在线| 亚洲激情不卡| 亚洲人成网站999久久久综合| 久久国产精品72免费观看| 午夜精品电影| 国产精品久久久久久一区二区三区 | 国产一区二区三区在线播放免费观看| 夜夜嗨一区二区| 夜夜嗨av一区二区三区四季av| 另类综合日韩欧美亚洲| 免费看亚洲片| 伊人蜜桃色噜噜激情综合| 久久se精品一区二区| 久久激情综合网| 国产精品一区二区女厕厕| 中日韩高清电影网| 亚洲摸下面视频| 国产精品视频精品视频| 午夜电影亚洲| 久久人人爽爽爽人久久久| 狠狠v欧美v日韩v亚洲ⅴ| 久久精品国产综合精品| 免费中文日韩| 亚洲免费av网站| 欧美私人网站| 亚洲男人av电影| 久久久噜噜噜久久| 亚洲国产美女精品久久久久∴| 欧美1区2区3区| 亚洲三级电影在线观看| 一区二区三区免费网站| 国产精品久久久久aaaa九色| 午夜视频一区在线观看| 美女999久久久精品视频| 亚洲精品123区| 欧美久久一区| 香蕉成人久久| 欧美激情一区二区三区在线| 夜夜嗨av一区二区三区网站四季av| 欧美午夜大胆人体| 欧美在线视频一区二区| 欧美激情亚洲一区| 午夜精品久久久久久久男人的天堂| 国产日韩欧美二区| 欧美成人有码| 亚洲欧美在线免费| 欧美激情欧美狂野欧美精品 | 国产伦精品一区二区三区视频孕妇| 欧美伊人久久| 亚洲理伦在线| 久久伊人一区二区| 亚洲一区二区在| 国内外成人在线视频| 欧美日韩日韩| 美日韩精品视频免费看| 亚洲中字在线| 亚洲激情在线播放| 久久亚洲精品一区| 午夜精品福利在线观看| 米奇777超碰欧美日韩亚洲| 亚洲日韩成人| 国色天香一区二区| 国产精品第2页| 美日韩精品视频| 欧美在线播放| 一本一本大道香蕉久在线精品| 久久综合中文| 欧美伊人久久久久久午夜久久久久 | 欧美三级中文字幕在线观看| 久久精品视频免费观看| 亚洲午夜一区二区| 亚洲精品在线看| 欧美激情bt| 每日更新成人在线视频| 久久精品91久久香蕉加勒比| 亚洲小少妇裸体bbw| 日韩视频在线一区二区三区| 狠狠做深爱婷婷久久综合一区| 国产女主播在线一区二区| 欧美三级视频在线| 欧美日韩一区二区三区四区在线观看 | 久久久久国产免费免费| 亚洲夜晚福利在线观看| 99精品欧美一区二区三区| 亚洲福利国产精品| 亚洲成人资源| 欧美日韩国产在线播放| 毛片基地黄久久久久久天堂| 久久久久久久久岛国免费| 欧美一区二区福利在线| 午夜精品久久久久久久99热浪潮| 亚洲天堂成人| 亚洲尤物在线视频观看| 亚洲一区免费视频| 亚洲影院在线观看| 亚洲一区日韩在线| 午夜精品久久一牛影视| 午夜精品av| 久久成人免费| 美女被久久久| 欧美激情91| 欧美色网在线| 国产精品资源在线观看| 国产亚洲精品美女| 在线日韩欧美视频| 亚洲每日更新| 亚洲丝袜av一区| 亚洲欧美日韩国产综合精品二区| 久久av在线| 免费h精品视频在线播放| 亚洲国产三级网| av成人免费在线| 性欧美大战久久久久久久久| 久久久久一区二区| 欧美精品久久99| 国产精品国色综合久久| 国内外成人免费视频| 亚洲国产精品精华液网站| 一级日韩一区在线观看| 欧美一区高清| 欧美激情一区二区三区高清视频| 99国内精品久久久久久久软件| 午夜在线电影亚洲一区| 免费91麻豆精品国产自产在线观看| 欧美精品在线看| 国产视频不卡| 日韩西西人体444www| 久久av一区二区三区| 亚洲国产女人aaa毛片在线| 亚洲午夜精品17c| 看欧美日韩国产| 国产精品男gay被猛男狂揉视频| 亚洲国产精选| 欧美一区日本一区韩国一区| 一本到12不卡视频在线dvd| 香蕉久久夜色精品国产使用方法| 狂野欧美性猛交xxxx巴西| 99爱精品视频| 久久综合久久综合九色| 国产精品久久久久7777婷婷| 亚洲国产成人tv| 久久不射2019中文字幕| 亚洲精品永久免费| 久久一区中文字幕| 国产欧美一区二区视频| 一本色道久久99精品综合| 老司机午夜精品| 亚洲欧美激情视频| 欧美午夜电影在线| 日韩视频在线播放| 欧美成人免费大片| 久久精品亚洲一区| 国产亚洲欧美日韩在线一区|