锘??xml version="1.0" encoding="utf-8" standalone="yes"?>一区精品久久,日韩一区二区久久,免费人成精品欧美精品http://m.shnenglu.com/HeavenOnProg/category/3973.html钑存棤娉曚簬鏈夋硶錛屽寲鏈夐檺涓烘棤闄?/description>zh-cnWed, 21 May 2008 07:58:34 GMTWed, 21 May 2008 07:58:34 GMT60ATL瀵規(guī)帴鍙f煡璇㈢殑鏀寔http://m.shnenglu.com/HeavenOnProg/archive/2007/04/30/23233.htmlmichaelmichaelMon, 30 Apr 2007 03:37:00 GMThttp://m.shnenglu.com/HeavenOnProg/archive/2007/04/30/23233.htmlhttp://m.shnenglu.com/HeavenOnProg/comments/23233.htmlhttp://m.shnenglu.com/HeavenOnProg/archive/2007/04/30/23233.html#Feedback0http://m.shnenglu.com/HeavenOnProg/comments/commentRss/23233.htmlhttp://m.shnenglu.com/HeavenOnProg/services/trackbacks/23233.htmlCOM瀵硅薄瀹炵幇鎺ュ彛鐨勬柟娉曟槸澶氱澶氭牱鐨勶紝甯哥敤鐨勬湁澶氶噸緇ф壙銆佽仛鍚堛乼ear-off絳夈備負(fù)浜嗘渶澶ч檺搴﹀湴鏀寔鎺ュ彛鏌ヨ鐨勫鏍鋒э紝ATL浣跨敤琛ㄩ┍鍔ㄧ殑鏂瑰紡鏉ョ鐞嗘帴鍙f煡璇紝浠ュ仛鍒頒唬鐮佸皝闂拰鎵╁睍鐏墊椿錛岃〃鏉$洰鏍煎紡涓猴細(xì)

struct 聽_ATL_INTMAP_ENTRY
{
聽聽聽聽
const 聽IID * 聽piid;聽
聽聽聽聽DWORD_PTR聽dw;
聽聽聽聽_ATL_CREATORARGFUNC
* 聽pFunc;聽
};


piid鏄帴鍙D錛宒w涓鴻嚜瀹氫箟鍙傛暟錛宲Func鏄嚜瀹氫箟鍑芥暟鐨勫湴鍧銆傚湪QueryInterface鏃訛紝ATL璋冪敤pFunc錛屽茍灝哾w浼犵粰pFunc錛宲Func鍙互鏍規(guī)嵁鑷繁鐨勯渶瑕佽В鏋恉w錛岃幏寰楁煡璇㈠繀闇鐨勪俊鎭侫TL棰勬彁渚涗簡涓浜涘嚱鏁版潵澶勭悊涓婅堪甯哥敤鐨勬煡璇㈣姹傦紝濡俖Creator銆乢Delegate絳夛紝瀹冧滑琚斁緗簬CComObjectRootBase涓?br />

錛?錛夊閲嶇戶鎵?br />聽聽聽聽聽聽聽聽聽聽聽ATL騫舵病鏈夋彁渚涙敮鎸佸閲嶇戶鎵跨殑鍑芥暟錛岃屾槸灝唒Func璁劇疆涓篲ATL_SIMPLEMAPENTRY瀹忥紝灝哾w璁句負(fù)鐖剁被瀛愬璞″湪瀛愮被瀵硅薄涓殑鍋忕Щ閲忥紝褰撴悳绱㈣〃鏃跺彂鐜皃Func涓篲ATL_SIMPLEMAPENTRY鏃訛紝渚跨洿鎺ヤ嬌鐢ㄥ亸縐婚噺鐩稿姞鑾峰緱緇撴灉銆?/p>

聽聽聽聽聽聽聽聽聽聽聽聽if 聽(pEntries -> pFunc聽 == 聽_ATL_SIMPLEMAPENTRY)聽
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽IUnknown * 聽pUnk聽 = 聽(IUnknown * )((INT_PTR)pThis + pEntries -> dw);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽pUnk
-> AddRef();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
* ppvObject聽 = 聽pUnk;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return 聽S_OK;
聽聽聽聽聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽聽鎺ュ彛鏄犲皠琛ㄩ」瀹忎負(fù)錛?/p>

聽聽聽聽聽聽聽聽聽#define 聽COM_INTERFACE_ENTRY(x)\
聽聽聽聽聽聽聽聽聽聽聽聽聽{
& _ATL_IIDOF(x),聽\
聽聽聽聽聽聽聽聽聽聽聽聽聽offsetofclass(x,聽_ComMapClass),聽\
聽聽聽聽聽聽聽聽聽聽聽聽聽_ATL_SIMPLEMAPENTRY},


錛?錛夎仛鍚?br />聽聽聽聽聽聽聽聽聽聽聽ATL浣跨敤_Delegate鍑芥暟鏉ユ敮鎸佽仛鍚堬紝姝ゆ椂dw瀛樺偍鐨勬槸鍐呴儴瀵硅薄鎸囬拡鎴愬憳鍙橀噺鍦ㄥ閮ㄥ璞′腑鐨勫亸縐婚噺錛宊Delegate鍒╃敤姝ゅ亸縐婚噺鑾峰緱鍐呴儴瀵硅薄鎸囬拡錛岀劧鍚庡皢鏌ヨ璋冪敤濮旀墭緇欏畠銆?/p>

聽聽聽聽static 聽HRESULT聽WINAPI聽_Delegate( void * 聽pv,聽REFIID聽iid,聽 void ** 聽ppvObject,聽DWORD_PTR聽dw)
聽聽聽聽{
聽聽聽聽聽聽聽聽HRESULT聽hRes聽
= 聽E_NOINTERFACE;
聽聽聽聽聽聽聽聽IUnknown
* 聽p聽 = * (IUnknown ** )((DWORD_PTR)pv聽 + 聽dw);
聽聽聽聽聽聽聽聽
if 聽(p聽 != 聽NULL)
聽聽聽聽聽聽聽聽聽聽聽聽hRes聽
= 聽p -> QueryInterface(iid,聽ppvObject);
聽聽聽聽聽聽聽聽
return 聽hRes;
聽聽聽聽}
聽聽聽
聽聽聽聽聽聽聽聽聽鎺ュ彛鏄犲皠琛ㄩ」瀹忎負(fù)錛?br />
聽聽聽聽聽聽#define聽COM_INTERFACE_ENTRY_AGGREGATE(iid,聽punk)\
聽聽聽聽聽聽聽聽聽聽{
&iid,\
聽聽聽聽聽聽聽聽聽聽(DWORD_PTR)offsetof(_ComMapClass,聽punk),\
聽聽聽聽聽聽聽聽聽聽_Delegate},
聽聽聽
錛?錛塼ear-off
聽聽聽聽聽聽聽聽聽聽聽ATL浣跨敤_Creator鍑芥暟鏉ユ敮鎸乼ear-off錛屾鏃禿w涓瓨鍌ㄧ殑鏄竴涓潤鎬乢ATL_CREATORDATA緇撴瀯鐨勫湴鍧錛宊Creator鍒╃敤鍏朵腑鐨勬寚鍚戝垱寤哄嚱鏁扮殑鎸囬拡鍒涘緩涓涓猼ear-off瀵硅薄銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽static聽HRESULT聽WINAPI聽_Creator(void*聽pv,聽REFIID聽iid,聽void**聽ppvObject,聽DWORD_PTR聽dw)
聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽_ATL_CREATORDATA
*聽pcd聽=聽(_ATL_CREATORDATA*)dw;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return聽pcd->pFunc(pv,聽iid,聽ppvObject);
聽聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽聽鎺ュ彛鏄犲皠琛ㄩ」瀹忎負(fù)錛?br />聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽#define聽COM_INTERFACE_ENTRY_TEAR_OFF(iid,聽x)\
聽聽聽聽聽聽聽聽聽聽{
&iid,\
聽聽聽聽聽聽聽聽聽聽(DWORD_PTR)
&ATL::_CComCreatorData<\
聽聽聽聽聽聽聽聽聽聽聽聽聽聽ATL::CComInternalCreator
<聽ATL::CComTearOffObject<聽x聽>>\
聽聽聽聽聽聽聽聽聽聽聽聽聽聽
>::data,\
聽聽聽聽聽聽聽聽聽聽_Creator},

聽聽聽聽聽聽_ComCreatorData鐨勭浉鍏沖畾涔夊涓嬶細(xì)
聽聽聽聽聽聽
struct聽_ATL_CREATORDATA
{
聽聽聽聽_ATL_CREATORFUNC
*聽pFunc;
};

template聽
<class聽Creator>
class聽_CComCreatorData
{
public:
聽聽聽聽
static聽_ATL_CREATORDATA聽data;
};

template聽
<class聽Creator>
_ATL_CREATORDATA聽_CComCreatorData
<Creator>::data聽=聽{Creator::CreateInstance};


聽聽聽聽聽聽鎴戜滑榪樺彲浠ュ畾涔夎嚜宸辯殑鎺ュ彛鏌ヨ杈呭姪鍑芥暟鍜岃緟鍔╂暟鎹紝閫氳繃dw鍜宲Func鏉ュ畬鎴愬悇縐嶅崈濂囩櫨鎬殑鎺ュ彛瀹炵幇鏂瑰紡錛岄渶瑕佺殑鍙槸鎯寵薄鍔涖?img src ="http://m.shnenglu.com/HeavenOnProg/aggbug/23233.html" width = "1" height = "1" />

michael 2007-04-30 11:37 鍙戣〃璇勮
]]>
ATL瀵瑰璞″垱寤虹殑鏀寔http://m.shnenglu.com/HeavenOnProg/archive/2007/04/10/21605.htmlmichaelmichaelTue, 10 Apr 2007 09:36:00 GMThttp://m.shnenglu.com/HeavenOnProg/archive/2007/04/10/21605.htmlhttp://m.shnenglu.com/HeavenOnProg/comments/21605.htmlhttp://m.shnenglu.com/HeavenOnProg/archive/2007/04/10/21605.html#Feedback0http://m.shnenglu.com/HeavenOnProg/comments/commentRss/21605.htmlhttp://m.shnenglu.com/HeavenOnProg/services/trackbacks/21605.html聽聽聽聽聽聽聽聽聽鍦ˋTL涓紝class factory綾誨拰鏅氱被瀵硅薄鐨勫垱寤洪兘鍙互閫氳繃琚О涓衡滃垱寤鴻呪濈殑妯℃澘綾繪潵鍒涘緩銆?br />聽聽聽聽聽聽聽聽聽
template聽<class聽T1>
class聽CComCreator
{
public:
聽聽聽聽
static聽HRESULT聽WINAPI聽CreateInstance(void*聽pv,聽REFIID聽riid,聽LPVOID*聽ppv)
聽聽聽聽{
聽聽聽聽聽聽聽聽HRESULT聽hRes聽=聽E_OUTOFMEMORY;
聽聽聽聽聽聽聽聽T1
*聽p聽=聽NULL;
聽聽聽聽聽聽聽聽p聽
=newT1(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;
聽聽聽聽}
};

聽聽聽聽聽聽聽聽聽鈥滃垱寤鴻呪濋氳繃鎻愪緵涓涓潤鎬佸嚱鏁癈reateInstance鏉ュ垱寤烘寚瀹氱被鐨勫疄渚嬶紝騫朵笖鏌ヨ鎸囧畾鐨勬帴鍙c傜涓涓弬鏁板湪瀹炰緥鍖栨櫘閫氬璞″拰class factory瀵硅薄鏃朵細(xì)鏈変笉鍚岋細(xì)瀵逛簬鏅氬璞★紝閫氬父浼?xì)浼犻掕仛鍚堝閮ㄥ璞$殑IUnknown鎸囬拡錛屽鏋滄槸闈炶仛鍚堝垱寤猴紝鍙互浼犻扤ULL錛堣瑙丄TL瀵笴OM瀹炰綋韜喚鐨勬敮鎸佸洓錛夛紱紼嶅悗浼?xì)浠嬀l嶅湪class factory鍒涘緩鏃剁涓涓弬鏁扮殑鐢ㄥ銆?br />聽聽聽聽聽聽聽聽聽鍦ˋTL涓紝涓涓猚lass factory瀵硅薄鍙兘鍒涘緩涓縐嶇被鍨嬬殑COM綾誨疄渚嬨傚湪class factory鐨凜reateInstance鍑芥暟涓紝瀹冧笉鏄‖緙栫爜琚垱寤虹殑瀵硅薄綾誨瀷錛岃屾槸閫氳繃涓涓?em>鍑芥暟鎸囬拡鎴愬憳鍙橀噺鏉ュ垱寤哄畠鎵綆$悊鐨勫璞★紝鑰岃繖涓嚱鏁版寚閽堟寚鍚戠殑閫氬父灝辨槸鏌愪釜COM綾葷殑鈥滃垱寤鴻呪濈被鐨凜reateInstance闈欐佸嚱鏁扮殑鍦板潃錛屾鍦板潃鏄湪class factory瀵硅薄琚畠鑷韓鐨勨滃垱寤鴻呪濈殑CreateInstance鍑芥暟鍒涘緩鏃墮氳繃絎竴涓弬鏁頒紶榪涙潵鐨勶紝class factory閲嶆柊瀹氫箟浜哠etVoid鍑芥暟錛屽茍涓斾繚瀛樿繖涓湴鍧錛?br />聽聽聽聽聽聽聽聽聽
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;
};

聽聽聽聽聽聽聽聽聽鏍規(guī)嵁涓婇潰鐨勮璁猴紝涓涓狢OM綾葷殑鍒涘緩鑰呬細(xì)鍍忚繖涓牱瀛愶細(xì)
聽聽聽聽聽聽聽聽聽CComCreator<聽CComObject<CMyClass> >
聽聽聽聽聽聽聽聽聽鑰屼竴涓猚lass factory鐨勫垱寤鴻呬細(xì)鍍忚繖涓牱瀛愶細(xì)
聽聽聽聽聽聽聽聽聽CComCreator< CComCachedObject<CComClassFactory> >銆?br />聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽ATL鍦ㄥ鎴瘋姹傚垱寤篊MyClass瀵硅薄鏃舵墽琛岀殑浼唬鐮佸涓嬶細(xì)
聽聽聽聽聽聽聽聽聽
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);


michael 2007-04-10 17:36 鍙戣〃璇勮
]]>
ATL瀵笴OM瀹炰綋韜喚鐨勬敮鎸侊紙鍥涳級鈥斺?CComObject鍙?qiáng)鍏朵紮浼?/title><link>http://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21408.html</link><dc:creator>michael</dc:creator><author>michael</author><pubDate>Fri, 06 Apr 2007 07:33:00 GMT</pubDate><guid>http://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21408.html</guid><wfw:comment>http://m.shnenglu.com/HeavenOnProg/comments/21408.html</wfw:comment><comments>http://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/HeavenOnProg/comments/commentRss/21408.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/HeavenOnProg/services/trackbacks/21408.html</trackback:ping><description><![CDATA[ <p> </p> <p>聽聽聽聽聽聽鏈変簡CComObjectRootBase銆丆ComObjectRootEx鍜岀嚎紼嬫ā鍨嬬壒寰佺被榪欎簺鍩虹鍘熸枡錛孋ComObject鍜屽畠鐨勪紮浼翠滑渚垮彲浠ヨ嚜鐢辯殑鍙戞尌瀹冧滑鐨勬兂璞′簡銆?br /><br />1.CComObject 鈥斺?鏅氬爢瀵硅薄聽聽聽聽聽聽<br />聽聽聽涓嬮潰鏄簿綆鐨凜ComObject妯℃澘綾葷殑瀹氫箟錛毬犅犅犅犅犅?/p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <span style="COLOR: #000000">template聽</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">聽Base</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">聽CComObject聽:聽</span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">聽Base<br />{<br /></span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">:<br />聽聽聽聽CComObject(</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">聽NULL)聽</span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000">()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽_pAtlModule</span> <span style="COLOR: #000000">-></span> <span style="COLOR: #000000">Lock();<br />聽聽聽聽}<br />聽聽聽聽<br /></span> <span style="COLOR: #0000ff">聽聽聽聽virtual</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #000000">~</span> <span style="COLOR: #000000">CComObject()聽</span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000">()<br />聽聽聽聽{<br /></span> <span style="COLOR: #000000">聽聽聽聽聽聽聽聽FinalRelease();<br /></span> <span style="COLOR: #000000">聽聽聽聽聽聽聽 _pAtlModule</span> <span style="COLOR: #000000">-></span> <span style="COLOR: #000000">Unlock();<br />聽聽聽聽}<br />聽聽聽聽<br /></span> <span style="COLOR: #000000">聽聽聽 STDMETHOD_(ULONG,聽AddRef)()聽{</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽InternalAddRef();}<br />聽聽聽聽STDMETHOD_(ULONG,聽Release)()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽ULONG聽l聽</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">聽InternalRelease();<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">聽(l聽</span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">)<br />聽聽聽聽聽聽聽聽聽聽聽聽delete聽</span> <span style="COLOR: #0000ff">this</span> <span style="COLOR: #000000">;<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽l;<br />聽聽聽聽}<br />聽聽聽聽<br /></span> <span style="COLOR: #000000">聽聽聽聽STDMETHOD(QueryInterface)(REFIID聽iid,聽</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #000000">**</span> <span style="COLOR: #000000">聽ppvObject)聽</span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000">()<br />聽聽聽聽{</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽_InternalQueryInterface(iid,聽ppvObject);}<br />聽聽聽聽</span> <span style="COLOR: #000000"> <br />聽聽聽聽</span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000">聽HRESULT聽WINAPI聽CreateInstance(CComObject</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">Base</span> <span style="COLOR: #000000">>**</span> <span style="COLOR: #000000">聽pp)聽</span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000">();<br />};</span> </div> <p> <br />鈥滄櫘閫氬爢瀵硅薄鈥濇槸浣跨敤鏈涓洪綣佺殑綾伙紝瀹冩湁濡備笅鐗瑰緛錛?br />錛?錛夊湪鍫嗕腑鍒嗛厤鍐呭瓨 鈥斺?璁℃暟褰掗浂鏃剁敤delete閿姣?br />錛?錛夋敮鎸佺嫭绔嬪瓨鍦ㄧ殑瀵硅薄 鈥斺?浣跨敤InternalXXX鏉ュ疄鐜癐Unknown鍔熻兘<br />錛?錛変駭鐢熸椂閿佸畾鏈嶅姟鍣紝閿姣佹椂瑙i攣鏈嶅姟鍣?鈥斺?閫傜敤浜庡ぇ澶氭暟COM瀵硅薄</p> <p>2. CComAggObject 鈥斺?琚仛鍚堝爢瀵硅薄</p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <span style="COLOR: #000000">template聽</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">聽contained</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">聽CComAggObject聽:<br />聽聽聽聽</span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">聽IUnknown,<br />聽聽聽聽</span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">聽CComObjectRootEx</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">聽typename聽contained::_ThreadModel::ThreadModelNoCS聽</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000"> <br />{<br /></span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">:<br />聽聽聽聽CComAggObject(</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">聽pv)聽:聽m_contained(pv)<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽_pAtlModule</span> <span style="COLOR: #000000">-></span> <span style="COLOR: #000000">Lock();<br />聽聽聽聽}<br />聽聽聽聽</span> <span style="COLOR: #000000">HRESULT聽FinalConstruct()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽CComObjectRootEx</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">contained::_ThreadModel::ThreadModelNoCS</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000">::FinalConstruct();<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽m_contained.FinalConstruct();<br />聽聽聽聽}<br />聽聽聽聽</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000">聽FinalRelease()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽CComObjectRootEx</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">contained::_ThreadModel::ThreadModelNoCS</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000">::FinalRelease();<br />聽聽聽聽聽聽聽聽m_contained.FinalRelease();<br />聽聽聽聽}<br />聽聽聽</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #0000ff">virtual</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #000000">~</span> <span style="COLOR: #000000">CComAggObject()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽</span> <span style="COLOR: #000000">聽FinalRelease();<br /></span> <span style="COLOR: #000000">聽聽聽聽聽聽聽聽_pAtlModule</span> <span style="COLOR: #000000">-></span> <span style="COLOR: #000000">Unlock();<br />聽聽聽聽}<br /><br />聽聽聽聽STDMETHOD_(ULONG,聽AddRef)()聽{</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽InternalAddRef();}<br />聽聽聽聽STDMETHOD_(ULONG,聽Release)()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽ULONG聽l聽</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">聽InternalRelease();<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">聽(l聽</span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">)<br />聽聽聽聽聽聽聽聽聽聽聽聽delete聽</span> <span style="COLOR: #0000ff">this</span> <span style="COLOR: #000000">;<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽l;<br />聽聽聽聽}<br />聽聽聽聽STDMETHOD(QueryInterface)(REFIID聽iid,聽</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #000000">**</span> <span style="COLOR: #000000">聽ppvObject)<br />聽聽聽聽{<br /></span> <span style="COLOR: #000000">聽聽聽聽聽聽聽聽HRESULT聽hRes聽</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">聽S_OK;<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">聽(InlineIsEqualUnknown(iid))<br />聽聽聽聽聽聽聽聽{<br />聽聽聽聽聽聽聽聽聽聽聽聽</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">ppvObject聽</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">聽(</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">)(IUnknown</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">)</span> <span style="COLOR: #0000ff">this</span> <span style="COLOR: #000000">;<br />聽聽聽聽聽聽聽聽聽聽聽聽AddRef();<br /></span> <span style="COLOR: #000000">聽聽聽聽聽聽聽聽}<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">else</span> <span style="COLOR: #000000"> <br />聽聽聽聽聽聽聽聽聽聽聽聽hRes聽</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">聽m_contained._InternalQueryInterface(iid,聽ppvObject);<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽hRes;<br />聽聽聽聽}<br />聽聽聽</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000">聽HRESULT聽WINAPI聽CreateInstance(LPUNKNOWN聽pUnkOuter,聽CComAggObject</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">contained</span> <span style="COLOR: #000000">>**</span> <span style="COLOR: #000000">聽pp)錛?br /></span> <span style="COLOR: #000000"> <br />聽聽聽聽CComContainedObject</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">contained</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000">聽m_contained;<br />};</span> </div> <p> <br />聽 CComAggObject鏈夊涓嬬壒寰侊細(xì)<br />錛?錛夊湪鍫嗕腑鍒嗛厤鍐呭瓨<br />錛?錛夋敮鎸佽鑱氬悎鑱氬悎鐨勫璞?br />聽聽聽聽聽聽聽聽聽聽聽瀹炵幇浜嗕袱浠絀Unknown錛欳ComAggObject瀹炵幇浜嗗唴閮ㄨ仛鍚堢被鐪熸鐨処Unknown錛屽畠綆$悊瀵硅薄鐨勭敓瀛樻湡錛屽茍涓斿畬鎴愭帴鍙f煡璇紙閫氳繃contained瀵硅薄鐨刜InternalQueryInterface錛夛紱contained瀵硅薄瀹炵幇浜嗗叿鏈夎漿鍙戝姛鑳界殑IUnknown錛屽畠?yōu)畣鎵鏈夌殑璋冪敤杞彂緇機(jī)ComAggObject鍦ㄦ瀯閫犲嚱鏁頒腑鏀跺埌鐨勫閮↖Unknown鎸囬拡銆?br />錛?錛変駭鐢熸椂閿佸畾鏈嶅姟鍣紝閿姣佹椂瑙i攣鏈嶅姟鍣?br /><br />3. CComTearOffObject 鈥斺?tear-off 瀵硅薄</p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <span style="COLOR: #000000">template聽</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">聽Base</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">聽CComTearOffObject聽:聽</span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">聽Base<br />{<br /></span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">:<br />聽聽聽聽CComTearOffObject(</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">聽pv)<br />聽聽聽聽{<br /></span> <span style="COLOR: #000000">聽聽聽聽聽聽聽聽m_pOwner聽</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">聽reinterpret_cast</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">Base::_OwnerClass</span> <span style="COLOR: #000000">*></span> <span style="COLOR: #000000">(pv);<br />聽聽聽聽聽聽聽聽m_pOwner</span> <span style="COLOR: #000000">-></span> <span style="COLOR: #000000">AddRef();<br />聽聽聽聽}<br /></span> <span style="COLOR: #000000">聽聽聽聽</span> <span style="COLOR: #000000">~</span> <span style="COLOR: #000000">CComTearOffObject()<br />聽聽聽聽{<br /></span> <span style="COLOR: #000000">聽聽聽聽聽聽聽聽FinalRelease();<br /></span> <span style="COLOR: #000000">聽聽聽聽聽聽聽聽m_pOwner</span> <span style="COLOR: #000000">-></span> <span style="COLOR: #000000">Release();<br />聽聽聽聽}<br /><br />聽聽聽聽STDMETHOD_(ULONG,聽AddRef)()聽</span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000">()聽{</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽InternalAddRef();}<br />聽聽聽聽STDMETHOD_(ULONG,聽Release)()聽</span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000">()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽ULONG聽l聽</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">聽InternalRelease();<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000">聽(l聽</span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">)<br />聽聽聽聽聽聽聽聽聽聽聽聽delete聽</span> <span style="COLOR: #0000ff">this</span> <span style="COLOR: #000000">;<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽l;<br />聽聽聽聽}<br />聽聽聽聽STDMETHOD(QueryInterface)(REFIID聽iid,聽</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000">聽</span> <span style="COLOR: #000000">**</span> <span style="COLOR: #000000">聽ppvObject)聽</span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000">()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽</span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">聽m_pOwner</span> <span style="COLOR: #000000">-></span> <span style="COLOR: #000000">QueryInterface(iid,聽ppvObject);<br />聽聽聽聽}<br />};</span> </div> <br />聽聽聽tear-off瀵硅薄鏈夊涓嬬壒寰侊細(xì)<br />錛?錛夊湪鍫嗕腑鍒嗛厤鍐呭瓨<br />錛?錛夋敮鎸佸湪ATL緇勪歡鍐呴儴浣跨敤鐨則ear-off鎶鏈?br />錛?錛夌敓鎴愭椂閿佸畾鐖跺璞★紝閿姣佹椂瑙i攣鐖跺璞?br />錛?錛夌敓鍛藉懆鏈熺敱鑷繁綆$悊錛屾帴鍙f煡璇㈠鎵樼埗瀵硅薄<br /><br />4. CComObjectStack 鈥斺?鏍堝璞?br />聽聽聽 <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">template聽</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">聽Base</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">聽CComObjectStackEx聽:聽</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">聽Base<br />{<br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br />聽聽聽聽CComObjectStackEx(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">聽NULL)聽<br />聽聽聽聽{聽<br /></span><span style="COLOR: #000000">聽聽聽聽聽聽聽聽m_hResFinalConstruct聽</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">聽FinalConstruct();聽<br />聽聽聽聽}<br />聽聽聽聽</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CComObjectStackEx()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽 </span><span style="COLOR: #000000">FinalRelease();<br /></span><span style="COLOR: #000000">聽聽聽 }<br /><br />聽聽聽聽STDMETHOD_(ULONG,聽AddRef)()<br />聽聽聽聽{<br /></span><span style="COLOR: #0000ff">聽聽聽聽聽聽聽 return</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #000000">聽聽聽聽}<br /><br />聽聽聽聽STDMETHOD_(ULONG,聽Release)()<br />聽聽聽聽{<br /></span><span style="COLOR: #000000">聽聽聽聽聽聽聽聽</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #000000">聽聽聽聽}<br /><br />聽聽聽聽STDMETHOD(QueryInterface)(REFIID聽iid,聽</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">聽ppvObject)<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">聽_InternalQueryInterface(iid,聽ppvObject);<br />聽聽聽聽}<br /><br />聽聽聽聽HRESULT聽m_hResFinalConstruct;<br />};<br /></span></div><br />聽聽聽鏍堝璞℃湁濡備笅鐗瑰緛錛?br />錛?錛夊唴瀛樺垎閰嶄簬鏍堜笂 鈥斺?涓嶉渶瑕佸璞¤冭檻閲婃斁闂<br />錛?錛夋棤寮曠敤璁℃暟鍔熻兘<br />錛?錛夋瀯閫犳椂鍒濆鍖?鈥斺?闇瑕佸湪鏋勯犲嚱鏁拌皟鐢ㄥ悗媯(gè)鏌_hResFinalConstruct錛屼互鍒ゆ柇瀵硅薄鏄惁鏋勯犳垚鍔?br />錛?錛変笉閿佸畾鏈嶅姟鍣?br /><br />5. CComObjectGlobal 鈥斺?鍏ㄥ眬瀵硅薄<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">template聽</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">聽Base</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">聽CComObjectGlobal聽:聽</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">聽Base<br />{<br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br />聽聽聽聽CComObjectGlobal(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">聽NULL)<br />聽聽聽聽{<br />聽聽聽聽聽聽聽 </span><span style="COLOR: #000000">m_hResFinalConstruct聽</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">聽FinalConstruct();<br />聽聽聽聽}<br />聽聽聽聽</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CComObjectGlobal()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽聽聽聽聽聽FinalRelease();<br />聽聽</span><span style="COLOR: #000000">聽聽}<br />聽聽聽聽STDMETHOD_(ULONG,聽AddRef)()聽</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">聽_pAtlModule</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">Lock();<br />聽聽聽聽}<br />聽聽聽聽STDMETHOD_(ULONG,聽Release)()聽</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">聽_pAtlModule</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">Unlock();<br />聽聽聽聽}<br />聽聽聽聽STDMETHOD(QueryInterface)(REFIID聽iid,聽</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">聽ppvObject)聽</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">()<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">聽_InternalQueryInterface(iid,聽ppvObject);<br />聽聽聽聽}<br />聽聽聽聽HRESULT聽m_hResFinalConstruct;<br />};</span></div>聽聽聽<br />聽聽聽鍏ㄥ眬瀵硅薄鏈夊涓嬬壒寰侊細(xì)<br />錛?錛夊湪鍏ㄥ眬鏁版嵁鍖哄垎閰嶅唴瀛?br />錛?錛夊垵濮嬪寲鏃朵笉閿佸畾鏈嶅姟鍣紝寮曠敤璁℃暟鍙樺寲鏃舵墠閿佸畾鎴栬呰В閿佹湇鍔″櫒錛岃繖浣垮緱鍏ㄥ眬瀵硅薄鍙互琚敤浜庡叏灞綾誨巶瀵硅薄錛屼互瑙e喅鏈嶅姟鍣ㄥ拰綾誨巶涔嬮棿鐨勬閿侀棶棰?br />錛?錛夋瀯閫犳柟寮忓悓鏍堝璞?br /><br />聽聽聽榪樻湁涓浜涘叾瀹冪綾葷殑鐢熷瓨鏈熺鐞嗙被錛屽CComObjectNoLock銆丆ComObjectCached銆丆ComPolyObject絳夌瓑錛屽畠浠篃閮芥湁鑷繁鐙埌鐨勭敤澶勶紝鎴戜滑涔熷彲浠ユ牴鎹嚜宸辯殑闇瑕佺紪鍐欒嚜瀹氫箟鐨勭被銆傛諱箣CComObjectRootBase銆丆ComObjectRootEx鍜岀嚎紼嬫ā鍨嬬壒寰佺被灝卞儚鏄Н鏈ㄤ竴鏍鳳紝鎴戜滑鍙互浠繪剰鐨勬妸瀹冧滑緇勫悎鎴愭兂瑕佺殑褰㈢姸銆?img src ="http://m.shnenglu.com/HeavenOnProg/aggbug/21408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/HeavenOnProg/" target="_blank">michael</a> 2007-04-06 15:33 <a href="http://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21408.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>ATL瀵笴OM瀹炰綋韜喚鐨勬敮鎸侊紙涓夛級鈥斺?璁塊棶鍚屾鏀寔http://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21403.htmlmichaelmichaelFri, 06 Apr 2007 06:39:00 GMThttp://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21403.htmlhttp://m.shnenglu.com/HeavenOnProg/comments/21403.htmlhttp://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21403.html#Feedback0http://m.shnenglu.com/HeavenOnProg/comments/commentRss/21403.htmlhttp://m.shnenglu.com/HeavenOnProg/services/trackbacks/21403.html
class聽CComSingleThreadModel
{
public:
聽聽聽聽
static聽ULONG聽WINAPI聽Increment(LPLONG聽p)聽throw()聽{return++(*p);}
聽聽聽聽
static聽ULONG聽WINAPI聽Decrement(LPLONG聽p)聽throw()聽{return--(*p);}
聽聽聽聽typedef聽CComFakeCriticalSection聽AutoCriticalSection;
聽聽聽聽typedef聽CComFakeCriticalSection聽CriticalSection;
聽聽聽聽typedef聽CComSingleThreadModel聽ThreadModelNoCS;
};
class聽CComMultiThreadModel
{
public:
聽聽聽聽
static聽ULONG聽WINAPI聽Increment(LPLONG聽p)聽throw()聽{return聽InterlockedIncrement(p);}
聽聽聽聽
static聽ULONG聽WINAPI聽Decrement(LPLONG聽p)聽throw()聽{return聽InterlockedDecrement(p);}
聽聽聽聽typedef聽CComAutoCriticalSection聽AutoCriticalSection;
聽聽聽聽typedef聽CComCriticalSection聽CriticalSection;
聽聽聽聽typedef聽CComMultiThreadModelNoCS聽ThreadModelNoCS;
};
鍏朵腑鐨凜FakeCriticalSection瀹氫箟濡備笅錛?br />
class聽CComFakeCriticalSection
{
public:
聽聽聽聽HRESULT聽Lock()聽
throw()聽{聽return聽S_OK;聽}
聽聽聽聽HRESULT聽Unlock()聽
throw()聽{聽return聽S_OK;聽}
聽聽聽聽HRESULT聽Init()聽
throw()聽{聽return聽S_OK;聽}
聽聽聽聽HRESULT聽Term()聽
throw()聽{聽return聽S_OK;聽}
};

榪欎袱涓被鎻愪緵浜嗛拡瀵圭壒瀹氬闂村璞$殑鍚屾鎺у埗鏀寔銆?br />CComSingleThreadModel閫傜敤浜庡崟綰跨▼濂楅棿瀵硅薄錛屽畠涓嶉噰鐢ㄤ換浣曠嚎紼嬪悓姝ユ満鍒訛紱CComMultiThreadModel閫傜敤浜庡綰跨▼濂楅棿瀵硅薄錛屽畠浣跨敤win32鐨勫悓姝ユ満鍒舵潵瀹炵幇銆?br />
2.CComObjectRootEx妯℃澘綾?br />
template聽<class聽ThreadModel>
class聽CComObjectRootEx聽:聽public聽CComObjectRootBase
{
public:
聽聽聽聽typedef聽ThreadModel聽_ThreadModel;
聽聽聽聽typedef聽typename聽_ThreadModel::AutoCriticalSection聽_CritSec;
聽聽聽聽typedef聽CComObjectLockT
<_ThreadModel>聽ObjectLock;

聽聽聽聽ULONG聽InternalAddRef()
聽聽聽聽{
聽聽聽聽聽聽聽
return聽_ThreadModel::Increment(&m_dwRef);
聽聽聽聽}
聽聽聽聽ULONG聽InternalRelease()
聽聽聽聽{
聽聽聽聽聽聽聽聽return聽_ThreadModel::Decrement(&m_dwRef);
聽聽聽聽}

聽聽聽聽
void聽Lock()聽{m_critsec.Lock();}
聽聽聽聽
void聽Unlock()聽{m_critsec.Unlock();}

private:
聽聽聽聽_CritSec聽m_critsec;
};

瀹冧嬌鐢ㄤ紶鍏ョ殑綰跨▼妯″瀷鐗瑰緛綾繪潵瀹炵幇瀵硅薄鐙珛瀛樺湪鏃舵墍闇瑕佺殑寮曠敤璁℃暟鏀寔錛屽悓鏃舵彁渚涗簡涓涓柟渚垮璞″紑鍙戜嬌鐢ㄧ殑鍚屾閿侊紝鎴戜滑鍙互浣跨敤榪欎釜閿佹潵瀹屾垚瀵硅嚜瀹氫箟鏁版嵁璁塊棶鐨勪繚鎶ゃ?img src ="http://m.shnenglu.com/HeavenOnProg/aggbug/21403.html" width = "1" height = "1" />

michael 2007-04-06 14:39 鍙戣〃璇勮
]]>
ATL瀵笴OM瀹炰綋韜喚鐨勬敮鎸侊紙浜岋級鈥斺?CComObjectRootBasehttp://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21393.htmlmichaelmichaelFri, 06 Apr 2007 05:51:00 GMThttp://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21393.htmlhttp://m.shnenglu.com/HeavenOnProg/comments/21393.htmlhttp://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21393.html#Feedback0http://m.shnenglu.com/HeavenOnProg/comments/commentRss/21393.htmlhttp://m.shnenglu.com/HeavenOnProg/services/trackbacks/21393.html涓嬮潰鏄疌ComObjectRootBase鐨勫叧閿唬鐮侊細(xì)

class 聽CComObjectRootBase
{
public :
聽聽聽聽聽// 鏋勯犳敮鎸?br />聽聽聽聽聽//
聽聽
聽聽HRESULT聽FinalConstruct();
聽聽聽void聽FinalRelease();聽

聽聽聽聽聽//聽聽鎺ュ彛鏌ヨ鏀寔
聽聽聽聽聽//
聽聽聽聽聽static聽HRESULT聽WINAPI聽InternalQueryInterface(void*聽pThis,
聽聽聽聽聽聽聽聽
const聽_ATL_INTMAP_ENTRY*聽pEntries,聽REFIID聽iid,聽void**聽ppvObject);
聽聽聽
聽聽聽聽static聽HRESULT聽WINAPI聽_Break(void*,聽REFIID聽iid,聽void**,聽DWORD_PTR聽);
聽聽聽聽static聽HRESULT聽WINAPI聽_NoInterface(void*,聽REFIID聽,聽void**,聽DWORD_PTR聽);
聽聽聽聽static聽HRESULT聽WINAPI聽_Creator(void*聽pv,聽REFIID聽iid,聽void**ppvObject,聽DWORD_PTR聽dw);
聽聽聽聽static聽HRESULT聽WINAPI聽_Delegate(void*聽pv,聽REFIID聽iid,聽void**聽ppvObject,聽DWORD_PTR聽dw);
聽聽聽
static聽HRESULT聽WINAPI聽_Chain(void*聽pv,聽REFIID聽iid,聽void**聽ppvObject,聽DWORD_PTR聽dw);
聽聽聽
static聽HRESULT聽WINAPI聽_ChainAttr(void*聽pv,聽REFIID聽iid,聽void**聽ppvObject,聽DWORD_PTR聽dw);
聽聽聽
static聽HRESULT聽WINAPI聽_Cache(void*聽pv,聽REFIID聽iid,聽void**聽ppvObject,聽DWORD_PTR聽dw);

聽聽聽聽//聽 鑱氬悎鏀寔
聽聽聽 //
聽聽ULONG聽OuterAddRef()
聽聽聽聽{
聽聽聽聽聽聽聽聽
return聽m_pOuterUnknown->AddRef();
聽聽聽聽}
聽聽聽聽ULONG聽OuterRelease()
聽聽聽聽{
聽聽聽聽聽聽聽聽
return聽m_pOuterUnknown->Release();
聽聽聽聽}
聽聽聽聽HRESULT聽OuterQueryInterface(REFIID聽iid,聽
void**聽ppvObject)
聽聽聽聽{
聽聽聽聽聽聽聽聽
return聽m_pOuterUnknown->QueryInterface(iid,聽ppvObject);
聽聽聽聽}
聽聽聽聽
聽聽聽 //聽瀹炰綋韜喚鏀寔
聽聽聽 //
聽聽聽聽union
聽聽聽聽{
聽聽聽聽聽聽聽聽
long聽m_dwRef;
聽聽聽聽聽聽聽聽 IUnknown
*聽m_pOuterUnknown;
聽聽聽聽};
};

CComObjectRootBase涓昏鍔熻兘鍒嗕負(fù)錛?br />錛?錛夋瀯閫犳敮鎸侊細(xì)
聽聽聽聽聽聽聽聽聽聽聽聽鍗矲inalConstruct鍜孎inalRelease錛屽畠浠敤浜庡畨鍏ㄧ殑鏋勯犲拰閿姣佸璞°?br />錛?錛夋帴鍙f煡璇㈡敮鎸?br />聽聽聽聽聽聽聽聽聽聽聽聽閫氳繃鎺ュ彛鏄犲皠琛ㄦ潵瀹屾垚鎺ュ彛鏌ヨ鍔熻兘錛岃緇嗗唴瀹硅鍚庨潰鐨勬枃绔犮?br />錛?錛夎仛鍚堢姸鎬佷笅寮曠敤璁℃暟鎿嶄綔鐨勬敮鎸?br />聽聽聽聽聽聽聽聽聽聽聽聽鎻愪緵浜嗗皢IUnknown璇鋒眰濮旀墭緇欏閮ㄧ粍浠剁殑鏀寔銆傚綋瀵硅薄鐙珛瀛樺湪鏃訛紝瀵瑰紩鐢ㄨ鏁版搷浣滅殑鏀寔琚斁緗簬CComObjectRootEx涓紝鍥犱負(fù)娑夊強(qiáng)鍒頒簡濂楅棿鍜岃闂悓姝ャ?br />錛?錛夊疄浣撹韓浠芥敮鎸?br />聽聽聽聽聽聽聽聽聽聽聽聽浣垮緱瀵硅薄鍙互鐙珛瀛樺湪鎴栬呰鑱氬悎錛屽洜涓鴻繍琛屾椂鍒誨璞″彧鑳戒互涓縐嶆柟寮忓瓨鍦紝鎵浠ヤ嬌鐢ㄤ簡union銆?img src ="http://m.shnenglu.com/HeavenOnProg/aggbug/21393.html" width = "1" height = "1" />

michael 2007-04-06 13:51 鍙戣〃璇勮
]]>
ATL瀵笴OM瀹炰綋韜喚鐨勬敮鎸侊紙涓錛夆斺?綾誨眰嬈$粨鏋?/title><link>http://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.html</link><dc:creator>michael</dc:creator><author>michael</author><pubDate>Fri, 06 Apr 2007 03:46:00 GMT</pubDate><guid>http://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.html</guid><wfw:comment>http://m.shnenglu.com/HeavenOnProg/comments/21382.html</wfw:comment><comments>http://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/HeavenOnProg/comments/commentRss/21382.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/HeavenOnProg/services/trackbacks/21382.html</trackback:ping><description><![CDATA[ <img height="325" alt="ATLComClasses.JPG" src="http://m.shnenglu.com/images/cppblog_com/heavenonprog/ATLComClasses.JPG" width="568" border="0" /> <br />聽聽聽聽聽聽聽聽聽聽聽聽涓涓狢OM瀵硅薄蹇呴』瀹炵幇IUnknown鎺ュ彛鎵瑙勫畾鐨勫姛鑳斤紝鍗崇敓鍛芥湡綆$悊鍜岃繍琛屾椂綾誨瀷杞崲銆?br />錛?錛夊熀鏈琁Unknow鍔熻兘<br />聽聽聽聽聽聽聽聽聽聽聽 瀵硅薄鐨勭敓瀛樻柟寮忓彲浠ユ槸鍫嗗瓨鍌ㄣ佹爤瀛樺偍浠ュ強(qiáng)鍏ㄥ眬瀛樺偍錛屽悓鏃禖OM榪樻彁渚涗簡涓縐嶈鑱氬悎鐨勭敓瀛樻柟寮忋傜敓瀛樻柟寮忎笉鍚岋紝AddRef銆丷elease鍜孮ueryInterface鐨勫疄鐜版柟寮忓氨涓嶅悓銆傛瘮濡傦細(xì)瀵逛簬鍫嗘柟寮忥紝Release瑕佸湪寮曠敤璁℃暟褰掗浂鏃惰礋璐i噴鏀懼爢絀洪棿錛岃屾爤浠ュ強(qiáng)鍏ㄥ眬鏂瑰紡鍒欎笉蹇咃紱瀵逛簬鑱氬悎鏂瑰紡錛孉ddRef銆丷elease浠ュ強(qiáng)澶ч儴鍒嗙殑QueryInterface璋冪敤瑕佸鎵樼粰澶栭儴瀵硅薄銆?br />聽聽聽聽聽聽聽聽聽聽聽 涓轟簡杈懼埌瀵硅薄鐨勯昏緫鍔熻兘涓庡叾鐢熷瓨鏂瑰紡鐨勫垎紱伙紝COM鎶婂IUnknown鍩烘湰鍔熻兘鐨勫疄鐜版帹榪熷埌綾誨眰嬈$粨鏋勭殑鏈搴曞眰錛屽嵆CComObject錛堟垨瀹冪殑鍏朵粬浼欎即錛夊銆?br />聽聽聽聽聽聽聽聽聽聽聽 CComObjectRootBase涓篊ComObject鐨勫疄鐜版彁渚涘師鏉愭枡鐨勬敮鎸侊紝濡傛彁渚涘紩鐢ㄨ鏁板彉閲忋佸熀鏈殑鎺ュ彛鏌ヨ鏈哄埗絳夛紝瀹冩槸涓涓滃姛鑳介泦涓被鈥濄?br />錛?錛夊闂村畨鍏ㄦ敮鎸?br />聽聽聽聽聽聽聽聽聽聽聽 鏍規(guī)嵁瀵硅薄鎵澶勭殑濂楅棿綾誨瀷錛屽璞″姛鑳界殑瀹炵幇闇瑕佷笉鍚岀殑鍚屾鏀寔銆傚浜庡崟綰跨▼濂楅棿瀵硅薄錛岀敱COM搴撴潵淇濊瘉璁塊棶鐨勫悓姝ワ紱鑰屽浜庡綰跨▼濂楅棿瀵硅薄錛岄渶瑕佽嚜宸辨潵鍚屾璋冪敤銆備負(fù)浜嗕嬌濂楅棿瀹夊叏鏀寔涓庨昏緫鍔熻兘鍒嗙錛孉TL鎻愪緵浜嗕竴緇勬彁渚涚嚎紼嬪畨鍏ㄦ搷浣滄敮鎸佺殑鐗瑰緛綾伙紙traits綾伙級鈥斺?CComSingleThreadModel鍙?qiáng)鍏朵紮浼淬傚畠浠彁渚涗簡瀵逛竴涓狶ONG鍙橀噺鈥滄伆濂界嚎紼嬪畨鍏ㄢ濈殑澧炲噺鎿嶄綔錛屼互鍙?qiáng)璺熷闂淳c誨瀷鍖歸厤鐨凜riticalSection鍔熻兘綾匯?br />聽聽聽聽聽聽聽聽聽聽聽 ATL鍚屾椂鎻愪緵浜咰ComObjectRootEx妯℃澘綾伙紝瀹冧互鏌愮ThreadModel鐗瑰緛綾諱綔涓哄弬鏁幫紝鎻愪緵瀵瑰紩鐢ㄨ鏁扳滄伆濂界嚎紼嬪畨鍏ㄢ濈殑鎿嶄綔錛屽茍涓旀彁渚涗簡涓涓敤浜庡璞″悓姝ョ殑閿併?br />聽聽聽聽聽聽聽聽聽聽聽聽PS:鈥滄伆濂界嚎紼嬪畨鍏ㄢ濈殑鎿嶄綔鐨勬剰鎬濇槸錛氬浜庨渶瑕佺嚎紼嬪悓姝ョ殑瀵硅薄錛屾彁渚泈in32 CriticalSection鏀寔錛涘浜庝笉闇瑕佺殑瀵硅薄錛屽垯浠涔堜篃涓嶅仛銆?br /><img src ="http://m.shnenglu.com/HeavenOnProg/aggbug/21382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/HeavenOnProg/" target="_blank">michael</a> 2007-04-06 11:46 <a href="http://m.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://cgnwp.com" target="_blank">亚洲激情视频在线</a>| <a href="http://899399com.com" target="_blank">国产一区二区你懂的</a>| <a href="http://www-452.com" target="_blank">久久精品五月</a>| <a href="http://toomicsvip.com" target="_blank">亚洲茄子视频</a>| <a href="http://www666se.com" target="_blank">国产欧美va欧美va香蕉在</a>| <a href="http://www151zh.com" target="_blank">免费不卡中文字幕视频</a>| <a href="http://ahhccz.com" target="_blank">久久天天躁夜夜躁狠狠躁2022</a>| <a href="http://www-33tt.com" target="_blank">午夜伦理片一区</a>| <a href="http://060607.com" target="_blank">久久av一区二区</a>| <a href="http://gzxyh88.com" target="_blank">男女激情久久</a>| <a href="http://xxx444vip.com" target="_blank">国产精品草莓在线免费观看</a>| <a href="http://xtsjjw.com" target="_blank">国产精品日韩欧美大师</a>| <a href="http://yjizzdizhigmail.com" target="_blank">国产欧美日本一区视频</a>| <a href="http://wwwn94.com" target="_blank">亚洲丰满在线</a>| <a href="http://yyypdq.com" target="_blank">亚洲一品av免费观看</a>| <a href="http://132653.com" target="_blank">欧美一区二区视频在线观看</a>| <a href="http://033232.com" target="_blank">久久亚洲精品中文字幕冲田杏梨</a>| <a href="http://137177.com" target="_blank">亚洲电影第1页</a>| <a href="http://94wr.com" target="_blank">亚洲一区自拍</a>| <a href="http://www18889.com" target="_blank">老司机久久99久久精品播放免费</a>| <a href="http://6688se.com" target="_blank">欧美成人一二三</a>| <a href="http://www-44469.com" target="_blank">国产精品视频免费</a>| <a href="http://376524.com" target="_blank">在线免费日韩片</a>| <a href="http://www49853b.com" target="_blank">亚洲一区免费网站</a>| <a href="http://remenkan.com" target="_blank">欧美~级网站不卡</a>| <a href="http://zhijiasd.com" target="_blank">一区二区三区四区国产</a>| <a href="http://maogo666.com" target="_blank">久久九九国产精品怡红院</a>| <a href="http://bdkaoyan.com" target="_blank">欧美日本不卡高清</a>| <a href="http://www-663345.com" target="_blank">一区在线视频观看</a>| <a href="http://123273.com" target="_blank">亚洲免费在线视频</a>| <a href="http://my6557.com" target="_blank">亚洲福利av</a>| <a href="http://www-273111.com" target="_blank">欧美一区二区视频97</a>| <a href="http://dfrllaser.com" target="_blank">欧美日本乱大交xxxxx</a>| <a href="http://2015xiaomingkankan.com" target="_blank">国产午夜精品一区二区三区欧美</a>| <a href="http://97seee.com" target="_blank">日韩视频一区二区</a>| <a href="http://zw1019.com" target="_blank">免费观看成人</a>| <a href="http://www-369111.com" target="_blank">亚洲欧美激情精品一区二区</a>| <a href="http://72nnnn.com" target="_blank">欧美全黄视频</a>| <a href="http://86808a.com" target="_blank">亚洲人成网站在线播</a>| <a href="http://9511331.com" target="_blank">久久精品欧洲</a>| <a href="http://227c7.com" target="_blank">亚洲自拍16p</a>| <a href="http://clwjbcxs.com" target="_blank">欧美三级在线视频</a>| <a href="http://www-876810.com" target="_blank">亚洲精品小视频</a>| <a href="http://www123hao.com" target="_blank">久热爱精品视频线路一</a>| <a href="http://360inns.com" target="_blank">一本一本大道香蕉久在线精品</a>| <a href="http://8004006.com" target="_blank">欧美jizzhd精品欧美巨大免费</a>| <a href="http://hnspygxjscyfwzx.com" target="_blank">国产亚洲a∨片在线观看</a>| <a href="http://dv6699.com" target="_blank">亚洲无线视频</a>| <a href="http://xgame8.com" target="_blank">亚洲精品在线看</a>| <a href="http://xxtv123.com" target="_blank">欧美激情bt</a>| <a href="http://www4466k.com" target="_blank">亚洲人成人一区二区在线观看</a>| <a href="http://495177.com" target="_blank">蜜臀a∨国产成人精品</a>| <a href="http://www-772773.com" target="_blank">香蕉av福利精品导航</a>| <a href="http://uu6623.com" target="_blank">国产精品国产亚洲精品看不卡15</a>| <a href="http://8004006.com" target="_blank">日韩一级二级三级</a>| <a href="http://wwwsenvpu.com" target="_blank">亚洲黄色成人网</a>| <a href="http://51jieyanla.com" target="_blank">欧美激情一区二区三区四区</a>| <a href="http://173168.com" target="_blank">91久久线看在观草草青青</a>| <a href="http://3233328.com" target="_blank">麻豆精品网站</a>| <a href="http://cechi8.com" target="_blank">久久久久久亚洲精品不卡4k岛国</a>| <a href="http://yiqipapa8.com" target="_blank">国产一区亚洲一区</a>| <a href="http://by71222.com" target="_blank">国产偷久久久精品专区</a>| <a href="http://xxxxxdywvip18.com" target="_blank">欧美在线播放</a>| <a href="http://86311ib.com" target="_blank">国产一区二区电影在线观看</a>| <a href="http://qdpetlove.com" target="_blank">欧美有码在线视频</a>| <a href="http://91x8.com" target="_blank">亚洲欧美卡通另类91av</a>| <a href="http://mm778899.com" target="_blank">国产精品爽爽ⅴa在线观看</a>| <a href="http://394141.com" target="_blank">午夜精品久久久久久久99热浪潮</a>| <a href="http://337795.com" target="_blank">99热免费精品</a>| <a href="http://s0247.com" target="_blank">国产精品久久久999</a>| <a href="http://133686.com" target="_blank">香蕉久久a毛片</a>| <a href="http://9486322.com" target="_blank">午夜日韩视频</a>| <a href="http://91see8.com" target="_blank">伊人久久大香线蕉av超碰演员</a>| <a href="http://laoyewo.com" target="_blank">免费成人你懂的</a>| <a href="http://heshundadi.com" target="_blank">欧美电影免费观看</a>| <a href="http://749996.com" target="_blank">一区二区三区欧美在线观看</a>| <a href="http://www101804.com" target="_blank">亚洲精选视频免费看</a>| <a href="http://pnxingmei.com" target="_blank">欧美三级网页</a>| <a href="http://roujizz.com" target="_blank">久久精品99国产精品日本</a>| <a href="http://488089.com" target="_blank">久久久亚洲人</a>| <a href="http://97aixxxx.com" target="_blank">日韩视频免费在线</a>| <a href="http://wwwmm7777.com" target="_blank">亚洲尤物视频网</a>| <a href="http://www-8438.com" target="_blank">激情成人亚洲</a>| <a href="http://ttzbdl.com" target="_blank">亚洲三级性片</a>| <a href="http://477980.com" target="_blank">国产日韩欧美在线视频观看</a>| <a href="http://nbpacking.com" target="_blank">美女免费视频一区</a>| <a href="http://nebnb89.com" target="_blank">欧美另类视频在线</a>| <a href="http://8p3c.com" target="_blank">久久精品亚洲一区</a>| <a href="http://52sougou.com" target="_blank">免费短视频成人日韩</a>| <a href="http://www44448.com" target="_blank">亚洲视频1区</a>| <a href="http://ssis378.com" target="_blank">久久精品国产精品亚洲</a>| <a href="http://wb2014.com" target="_blank">一本一道久久综合狠狠老精东影业 </a>| <a href="http://fs-nanxiang.com" target="_blank">午夜精品视频网站</a>| <a href="http://300644.com" target="_blank">在线看一区二区</a>| <a href="http://8135777.com" target="_blank">夜色激情一区二区</a>| <a href="http://y3u7.com" target="_blank">狠狠久久亚洲欧美</a>| <a href="http://9a5x.com" target="_blank">一区二区高清在线观看</a>| <a href="http://405151.com" target="_blank">一区二区三区在线视频免费观看</a>| <a href="http://xpj493.com" target="_blank">亚洲人成亚洲人成在线观看</a>| <a href="http://689657.com" target="_blank">国产精品自拍一区</a>| <a href="http://my736.com" target="_blank">亚洲韩国一区二区三区</a>| <a href="http://www280999.com" target="_blank">国产亚洲精品久久久久久</a>| <a href="http://www4455va.com" target="_blank">亚洲国产女人aaa毛片在线</a>| <a href="http://7770790.com" target="_blank">国产精品亚洲网站</a>| <a href="http://belerbb.com" target="_blank">亚洲人成免费</a>| <a href="http://854277.com" target="_blank">一区二区视频欧美</a>| <a href="http://9955377.com" target="_blank">亚洲综合导航</a>| <a href="http://zgztby.com" target="_blank">亚洲一二三区视频在线观看</a>| <a href="http://5456yy.com" target="_blank">久久午夜精品一区二区</a>| <a href="http://royaljinma.com" target="_blank">亚洲欧美一区二区三区久久</a>| <a href="http://xiangshi888.com" target="_blank">久热精品在线</a>| <a href="http://880895.com" target="_blank">久久亚洲精品视频</a>| <a href="http://ww3838.com" target="_blank">国产欧美日韩不卡免费</a>| <a href="http://ahhccz.com" target="_blank">99爱精品视频</a>| <a href="http://jy920.com" target="_blank">日韩亚洲精品电影</a>| <a href="http://spvicarb.com" target="_blank">老色批av在线精品</a>| <a href="http://www249aaa.com" target="_blank">久久久久久欧美</a>| <a href="http://www-136445.com" target="_blank">国产精品毛片高清在线完整版</a>| <a href="http://laoyewo.com" target="_blank">亚洲国产一区二区三区a毛片 </a>| <a href="http://caoav8.com" target="_blank">久久一区精品</a>| <a href="http://www-44469.com" target="_blank">久久成人免费网</a>| <a href="http://48488a.com" target="_blank">日韩午夜免费</a>| <a href="http://ccc36-com.com" target="_blank">美女日韩欧美</a>| <a href="http://www66617.com" target="_blank">久久夜色精品一区</a>| <a href="http://www-878009.com" target="_blank">国产精品影音先锋</a>| <a href="http://24kshopss.com" target="_blank">99视频日韩</a>| <a href="http://shanghaijiagu.com" target="_blank">99精品99</a>| <a href="http://688528.com" target="_blank">欧美日韩国产三级</a>| <a href="http://6k6a.com" target="_blank">亚洲人www</a>| <a href="http://maomi54.com" target="_blank">日韩一级片网址</a>| <a href="http://899399com.com" target="_blank">欧美黄在线观看</a>| <a href="http://xiehaihua.com" target="_blank">亚洲国产精品久久久久婷婷老年</a>| <a href="http://www-77663.com" target="_blank">激情伊人五月天久久综合</a>| <a href="http://987kt.com" target="_blank">午夜精品久久久久久久</a>| <a href="http://wwmm9.com" target="_blank">亚洲欧美在线一区二区</a>| <a href="http://ccnn33.com" target="_blank">国产精品高潮呻吟久久av无限</a>| <a href="http://www-94889.com" target="_blank">亚洲激情在线观看视频免费</a>| <a href="http://909059c.com" target="_blank">黑丝一区二区三区</a>| <a href="http://hfztkyhfz.com" target="_blank">久久精品免费播放</a>| <a href="http://winkwink333.com" target="_blank">久久久人成影片一区二区三区观看</a>| <a href="http://86808a.com" target="_blank">国产乱肥老妇国产一区二</a>| <a href="http://wwwsfsf11.com" target="_blank">在线亚洲精品</a>| <a href="http://jdss777.com" target="_blank">欧美一级片久久久久久久</a>| <a href="http://evaporsllc.com" target="_blank">国产精品一区免费视频</a>| <a href="http://avse69.com" target="_blank">欧美一区二粉嫩精品国产一线天</a>| <a href="http://www-132377.com" target="_blank">欧美中文字幕久久</a>| <a href="http://jm-comic3.com" target="_blank">国产综合亚洲精品一区二</a>| <a href="http://916969.com" target="_blank">久久久国产成人精品</a>| <a href="http://www-800778.com" target="_blank">母乳一区在线观看</a>| <a href="http://cpb-group.com" target="_blank">亚洲精品视频在线播放</a>| <a href="http://caoav8.com" target="_blank">欧美网站在线</a>| <a href="http://zhiuh.com" target="_blank">欧美一区精品</a>| <a href="http://bizssr.com" target="_blank">欧美激情四色</a>| <a href="http://3314133.com" target="_blank">亚洲一区二区精品</a>| <a href="http://bosengame.com" target="_blank">国产日韩欧美在线一区</a>| <a href="http://3333347.com" target="_blank">另类激情亚洲</a>| <a href="http://aa224.com" target="_blank">宅男噜噜噜66一区二区</a>| <a href="http://www49853b.com" target="_blank">久久都是精品</a>| <a href="http://www-137999.com" target="_blank">91久久国产精品91久久性色</a>| <a href="http://5657hh.com" target="_blank">欧美区在线观看</a>| <a href="http://0773ye.com" target="_blank">香港成人在线视频</a>| <a href="http://794238.com" target="_blank">欧美黄色一区二区</a>| <a href="http://ccc3636.com" target="_blank">亚洲私拍自拍</a>| <a href="http://kk66mm.com" target="_blank">一区在线免费观看</a>| <a href="http://5a07.com" target="_blank">欧美视频精品在线</a>| <a href="http://china-cvct.com" target="_blank">久久精品国产久精国产爱</a>| <a href="http://56qn.com" target="_blank">亚洲精品麻豆</a>| <a href="http://qqszdq.com" target="_blank">久久九九免费视频</a>| <a href="http://ynjzwh.com" target="_blank">亚洲狼人综合</a>| <a href="http://www520590.com" target="_blank">国产日本欧美在线观看</a>| <a href="http://118936.com" target="_blank">欧美a级片一区</a>| <a href="http://9885888.com" target="_blank">欧美一级片一区</a>| <a href="http://s3yx.com" target="_blank">亚洲精品自在久久</a>| <a href="http://b27227.com" target="_blank">久久久国产午夜精品</a>| <a href="http://857sds.com" target="_blank">日韩一级黄色片</a>| <a href="http://chenyirong.com" target="_blank">国外成人性视频</a>| <a href="http://zhiuh.com" target="_blank">欧美少妇一区二区</a>| <a href="http://74va.com" target="_blank">另类av导航</a>| <a href="http://arielteam.com" target="_blank">午夜亚洲福利在线老司机</a>| <a href="http://hbshwx.com" target="_blank">亚洲高清激情</a>| <a href="http://9931111.com" target="_blank">久久久免费精品视频</a>| <a href="http://mauhorng.com" target="_blank">亚洲一区二区三区久久</a>| <a href="http://qmynong.com" target="_blank">亚洲国产成人91精品</a>| <a href="http://www780yy.com" target="_blank">国产欧美va欧美va香蕉在</a>| <a href="http://my17677.com" target="_blank">欧美啪啪一区</a>| <a href="http://hankanzhan.com" target="_blank">免费h精品视频在线播放</a>| <a href="http://4006616309.com" target="_blank">亚洲综合日本</a>| <a href="http://909059c.com" target="_blank">夜夜嗨av一区二区三区网页</a>| <a href="http://www777788c.com" target="_blank">欧美黄色aa电影</a>| <a href="http://a6a3.com" target="_blank">免费成人高清视频</a>| <a href="http://www-9694.com" target="_blank">欧美制服丝袜</a>| <a href="http://www-kkjj88.com" target="_blank">亚洲欧美日韩人成在线播放</a>| <a href="http://3dmh133.com" target="_blank">亚洲美女福利视频网站</a>| <a href="http://sxhrdyb.com" target="_blank">影音先锋亚洲电影</a>| <a href="http://srojsy.com" target="_blank">亚洲欧美美女</a>| <a href="http://btbt7086.com" target="_blank">午夜国产一区</a>| <a href="http://342008.com" target="_blank">亚洲伦理在线</a>| <a href="http://xxxx90.com" target="_blank">91久久精品美女高潮</a>| <a href="http://wnboke.com" target="_blank">国内精品久久久久伊人av</a>| <a href="http://478884.com" target="_blank">国产精品日韩精品</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>