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

隨筆-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 閱讀(1564) 評論(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>
            亚洲精品一区二区三区蜜桃久| 亚洲综合第一页| 极品尤物av久久免费看| 亚洲视频第一页| 亚洲第一搞黄网站| 欧美午夜免费影院| 欧美成年人视频网站欧美| 亚洲欧美综合另类中字| 宅男噜噜噜66国产日韩在线观看| 亚洲免费视频网站| 亚洲午夜精品久久久久久app| 夜夜嗨一区二区| 99国产精品国产精品久久| 亚洲欧洲日本专区| 亚洲国产一区二区精品专区| 激情综合久久| 亚洲第一成人在线| 亚洲黄色在线观看| 一区二区三区四区国产| 亚洲一区二区3| 亚洲一级影院| 久久国产精品99国产精| 久久亚洲二区| 欧美二区在线| 亚洲二区在线观看| 日韩视频在线免费| 一区二区激情视频| 欧美亚洲视频| 噜噜噜在线观看免费视频日韩| 噜噜噜91成人网| 欧美啪啪一区| 国产日韩欧美一区二区三区四区| 国产精品影视天天线| 一区二区在线观看视频在线观看 | 亚洲精品免费在线播放| 亚洲精品国久久99热| 9色精品在线| 亚洲欧美另类在线观看| 久久婷婷国产综合国色天香| 欧美日韩精品是欧美日韩精品| 欧美日韩一级片在线观看| 国产精品国色综合久久| 国产一本一道久久香蕉| 亚洲美女91| 亚洲另类一区二区| 午夜精品久久久久久久99黑人| 巨胸喷奶水www久久久免费动漫| 亚洲欧洲一区二区天堂久久 | 国产精品一区视频网站| 亚洲国产精品va在线观看黑人| 一区二区三区精品视频| 久久影院亚洲| 欧美99在线视频观看| 一本色道久久综合亚洲精品不| 久久国产精品久久精品国产| 欧美激情一二三区| 久久福利毛片| 国产精品欧美激情| 日韩午夜激情电影| 亚洲国产精品久久久久婷婷老年 | 亚洲精品一二区| 免播放器亚洲一区| 亚洲大片精品永久免费| 欧美不卡视频一区发布| 久久午夜视频| 亚洲国产裸拍裸体视频在线观看乱了| 久久久午夜电影| 久久精品视频在线| 亚洲高清视频在线| 亚洲国产精品国自产拍av秋霞| 免费欧美日韩| 在线视频欧美一区| 亚洲天堂免费观看| 国产情人综合久久777777| 久久精品2019中文字幕| 久久精品国产96久久久香蕉| 在线看国产一区| 亚洲国产一区二区a毛片| 欧美日韩国产不卡在线看| 一区二区三区四区五区精品| 亚洲一区二区三区四区五区黄| 国产亚洲精品福利| 欧美高清hd18日本| 欧美日韩国产首页| 欧美专区日韩专区| 老牛嫩草一区二区三区日本| 99精品欧美一区二区三区| 亚洲天堂av综合网| 国产主播一区二区| 91久久精品日日躁夜夜躁欧美| 欧美色视频在线| 久久久精品一区| 欧美二区在线| 亚洲男人的天堂在线| 久久―日本道色综合久久| 一区二区免费看| 久久xxxx精品视频| 一本一本大道香蕉久在线精品| 亚洲淫片在线视频| 亚洲欧洲在线一区| 午夜精品视频网站| 99v久久综合狠狠综合久久| 午夜亚洲性色福利视频| 亚洲精品中文字幕在线| 欧美一级电影久久| 亚洲一级在线| 欧美成人亚洲成人| 欧美在线免费视屏| 欧美精品一区二区蜜臀亚洲| 性欧美8khd高清极品| 欧美激情亚洲精品| 欧美岛国在线观看| 国产亚洲午夜高清国产拍精品| 亚洲靠逼com| 亚洲高清在线| 欧美成人资源网| 国产精品一区二区三区成人| 亚洲福利视频在线| 狠狠色综合一区二区| 中文亚洲免费| 亚洲图片欧洲图片av| 免费在线亚洲欧美| 麻豆精品一区二区av白丝在线| 国产精品亚洲综合一区在线观看| 亚洲人成免费| 亚洲国产精品va在线看黑人 | 久久天天狠狠| 国产女主播一区二区| 日韩亚洲视频在线| 亚洲精品一区二| 玖玖综合伊人| 美女福利精品视频| 国产一区二区视频在线观看| 亚洲在线免费| 午夜宅男欧美| 国产精品嫩草99av在线| 亚洲视频在线观看三级| 亚洲午夜精品久久久久久浪潮 | 欧美在线黄色| 久久久综合免费视频| 国内精品视频一区| 久久精品色图| 欧美不卡一卡二卡免费版| 在线欧美日韩国产| 免费在线欧美视频| 亚洲精品在线免费观看视频| 亚洲午夜精品| 国产婷婷精品| 久久天天狠狠| 亚洲国产你懂的| 亚洲一区视频在线| 国产精品一区一区| 久久精品免费电影| 欧美gay视频| 日韩一区二区精品葵司在线| 欧美日韩一本到| 亚洲一区影音先锋| 久久精品夜色噜噜亚洲a∨| 黄色成人av网| 欧美精品亚洲精品| 亚洲欧美日韩成人| 猛干欧美女孩| 在线综合+亚洲+欧美中文字幕| 国产精品永久入口久久久| 久久九九精品| 夜夜嗨av一区二区三区中文字幕 | 久久伊人精品天天| 亚洲国产片色| 午夜宅男久久久| 最新成人av在线| 国产精品九九| 媚黑女一区二区| 亚洲综合日韩中文字幕v在线| 久久综合久久久| 亚洲一区在线免费观看| 极品尤物一区二区三区| 欧美理论电影在线观看| 久久国产欧美日韩精品| 亚洲伊人久久综合| 在线观看日产精品| 国产精品国产三级国产普通话蜜臀 | 亚洲第一福利社区| 欧美综合激情网| 日韩午夜在线播放| 狠狠色狠狠色综合日日tαg| 欧美日韩一区二区三区在线 | 99精品国产一区二区青青牛奶| 国产欧美日韩综合一区在线播放| 美国成人直播| 亚久久调教视频| 一道本一区二区| 美女诱惑一区| 午夜精品一区二区三区电影天堂| 亚洲高清电影| 国产日韩欧美亚洲| 欧美日韩在线播放一区| 欧美 日韩 国产在线| 久久精品日产第一区二区| 午夜免费日韩视频| 亚洲欧美日韩国产综合在线|