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

隨筆-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| 国产日韩精品视频一区二区三区| 国产一区二区三区黄| 亚洲电影免费观看高清| 一区二区三区精品视频在线观看| 亚洲免费综合| 免费亚洲电影在线| 99在线精品免费视频九九视| 校园春色国产精品| 欧美激情一区二区三区四区| 国产精品女同互慰在线看| 亚洲电影免费观看高清完整版| 一区二区三区久久久| 久久久成人精品| a4yy欧美一区二区三区| 欧美伊人久久大香线蕉综合69| 欧美韩日一区二区三区| 国产色综合久久| avtt综合网| 欧美日韩亚洲91| 国产亚洲女人久久久久毛片| 亚洲美女精品成人在线视频| 久久久久久久久蜜桃| 一区二区三区|亚洲午夜| 久久视频一区二区| 国产精品视频成人| 亚洲精品视频啊美女在线直播| 欧美在线免费视屏| 日韩一区二区高清| 美女精品在线| 伊人久久综合97精品| 久久se精品一区精品二区| 久久成人免费电影| 麻豆成人91精品二区三区| 国产精品入口麻豆原神| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 伊人伊人伊人久久| 欧美一级久久久久久久大片| 亚洲日本中文字幕区| 久久av一区二区| 国产喷白浆一区二区三区| 亚洲一区二区在线| 亚洲精选视频免费看| 欧美电影免费观看| 亚洲精品在线电影| 亚洲国产天堂久久国产91| 久久五月天婷婷| 亚洲高清在线播放| 欧美激情亚洲综合一区| 欧美成人乱码一区二区三区| 亚洲高清在线播放| 91久久精品国产91久久| 欧美韩日一区二区三区| 一区二区三区日韩在线观看| 日韩西西人体444www| 欧美日韩午夜激情| 亚洲欧美影音先锋| 亚洲免费在线看| 国产视频一区三区| 蜜臀久久久99精品久久久久久| 久久久久久69| 亚洲日本电影| 99国内精品| 国产日产亚洲精品| 久久婷婷国产综合国色天香| 久久久久久婷| 一本久久综合亚洲鲁鲁五月天| 一道本一区二区| 国模精品娜娜一二三区| 欧美1区2区视频| 欧美日韩免费一区二区三区视频| 亚洲免费网站| 久久久99国产精品免费| 亚洲老板91色精品久久| 亚洲一区二区动漫| 伊人婷婷欧美激情| 亚洲乱码精品一二三四区日韩在线 | 欧美亚洲系列| 在线看视频不卡| 日韩午夜中文字幕| 国产综合婷婷| 亚洲国产成人av| 最新日韩在线| 国产毛片精品视频| 欧美成人午夜激情在线| 欧美视频在线观看免费网址| 亚洲伊人伊色伊影伊综合网 | 亚洲成人资源| 亚洲精品在线免费观看视频| 欧美一区在线视频| 国内外成人免费激情在线视频网站 | 久久视频免费观看| 中文日韩欧美| 久久久噜噜噜久久狠狠50岁| 夜夜夜久久久| 久久精品电影| 午夜精品成人在线| 欧美激情成人在线| 美国十次成人| 国产欧美日韩一区二区三区| 亚洲日本精品国产第一区| 国产热re99久久6国产精品| 亚洲精品一区在线观看| 亚洲国产成人av| 欧美亚洲三区| 亚洲欧美国产日韩中文字幕| 欧美国产精品日韩| 蜜臀a∨国产成人精品| 国产目拍亚洲精品99久久精品| 亚洲国产精品一区二区www| 国产一区二区三区四区| 在线一区视频| 亚洲一区欧美激情| 欧美日韩伦理在线| 亚洲国产精品一区| 亚洲日本中文字幕| 免费的成人av| 亚洲东热激情| 亚洲精品国产精品国自产观看浪潮 | 亚洲伊人观看| 欧美色视频一区| 亚洲日韩中文字幕在线播放| 亚洲欧洲视频在线| 另类激情亚洲| 亚洲国语精品自产拍在线观看| 狠狠色丁香久久综合频道| 欧美一区视频在线| 久久精品成人一区二区三区| 国产精品一区二区在线| 亚洲女同精品视频| 欧美在线观看视频一区二区| 国产精品视频一区二区高潮| 亚洲私人影吧| 欧美在线视频一区| 亚洲特级片在线| 亚洲无亚洲人成网站77777| 欧美美女日韩| 亚洲网站在线观看| 久久精品五月| 亚洲风情在线资源站| 欧美国产成人精品| 最新69国产成人精品视频免费| 欧美激情在线免费观看| 亚洲精品国产拍免费91在线| 欧美高清视频一区二区| 99re国产精品| 欧美中文字幕第一页| 黄色成人91| 欧美精品videossex性护士| 亚洲精品偷拍| 欧美中文字幕视频| 在线欧美视频| 欧美三级乱码| 久久精品一区四区| 亚洲精品一二三区| 欧美一级视频精品观看| 亚洲第一区色| 欧美丝袜一区二区| 久久精品成人欧美大片古装| 亚洲欧洲一级| 欧美一级网站| 亚洲乱码久久| 国产视频亚洲精品| 欧美日韩国产综合视频在线观看| 亚洲在线网站| 亚洲第一网站| 久久超碰97人人做人人爱| 亚洲国产免费| 国产亚洲精品高潮| 欧美无乱码久久久免费午夜一区 | 欧美成人69av| 亚洲综合色网站| 亚洲精品一区在线观看香蕉| 久久免费高清视频| 中国女人久久久| 在线观看日韩av| 国产乱码精品一区二区三区av| 欧美成人日本| 久久久av水蜜桃| 亚洲自啪免费| 在线视频中文亚洲| 91久久久精品| 免费在线看一区| 欧美中文字幕在线播放| 亚洲一区二区成人| 99热在这里有精品免费| 在线日韩欧美视频| 狠狠色丁香久久婷婷综合丁香| 国产精品乱码人人做人人爱|