锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美国产成人久久精品,波多野结衣AV无码久久一区,成人午夜精品久久久久久久小说
http://www.shnenglu.com/HeavenOnProg/钑存棤娉曚簬鏈夋硶錛屽寲鏈夐檺涓烘棤闄?/description>zh-cnThu, 08 May 2025 08:27:34 GMTThu, 08 May 2025 08:27:34 GMT60- ATL瀵規帴鍙f煡璇㈢殑鏀寔http://www.shnenglu.com/HeavenOnProg/archive/2007/04/30/23233.htmlmichaelmichaelMon, 30 Apr 2007 03:37:00 GMThttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/30/23233.htmlhttp://www.shnenglu.com/HeavenOnProg/comments/23233.htmlhttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/30/23233.html#Feedback0http://www.shnenglu.com/HeavenOnProg/comments/commentRss/23233.htmlhttp://www.shnenglu.com/HeavenOnProg/services/trackbacks/23233.htmlCOM瀵硅薄瀹炵幇鎺ュ彛鐨勬柟娉曟槸澶氱澶氭牱鐨勶紝甯哥敤鐨勬湁澶氶噸緇ф壙銆佽仛鍚堛乼ear-off絳夈備負浜嗘渶澶ч檺搴﹀湴鏀寔鎺ュ彛鏌ヨ鐨勫鏍鋒э紝ATL浣跨敤琛ㄩ┍鍔ㄧ殑鏂瑰紡鏉ョ鐞嗘帴鍙f煡璇紝浠ュ仛鍒頒唬鐮佸皝闂拰鎵╁睍鐏墊椿錛岃〃鏉$洰鏍煎紡涓猴細
struct
聽_ATL_INTMAP_ENTRY
{
聽聽聽聽
const
聽IID
*
聽piid;聽
聽聽聽聽DWORD_PTR聽dw;
聽聽聽聽_ATL_CREATORARGFUNC
*
聽pFunc;聽
};
piid鏄帴鍙D錛宒w涓鴻嚜瀹氫箟鍙傛暟錛宲Func鏄嚜瀹氫箟鍑芥暟鐨勫湴鍧銆傚湪QueryInterface鏃訛紝ATL璋冪敤pFunc錛屽茍灝哾w浼犵粰pFunc錛宲Func鍙互鏍規嵁鑷繁鐨勯渶瑕佽В鏋恉w錛岃幏寰楁煡璇㈠繀闇鐨勪俊鎭侫TL棰勬彁渚涗簡涓浜涘嚱鏁版潵澶勭悊涓婅堪甯哥敤鐨勬煡璇㈣姹傦紝濡俖Creator銆乢Delegate絳夛紝瀹冧滑琚斁緗簬CComObjectRootBase涓?br />
錛?錛夊閲嶇戶鎵?br />聽聽聽聽聽聽聽聽聽聽聽ATL騫舵病鏈夋彁渚涙敮鎸佸閲嶇戶鎵跨殑鍑芥暟錛岃屾槸灝唒Func璁劇疆涓篲ATL_SIMPLEMAPENTRY瀹忥紝灝哾w璁句負鐖剁被瀛愬璞″湪瀛愮被瀵硅薄涓殑鍋忕Щ閲忥紝褰撴悳绱㈣〃鏃跺彂鐜皃Func涓篲ATL_SIMPLEMAPENTRY鏃訛紝渚跨洿鎺ヤ嬌鐢ㄥ亸縐婚噺鐩稿姞鑾峰緱緇撴灉銆?/p>
聽聽聽聽聽聽聽聽聽聽聽聽if
聽(pEntries
->
pFunc聽
==
聽_ATL_SIMPLEMAPENTRY)聽
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽IUnknown
*
聽pUnk聽
=
聽(IUnknown
*
)((INT_PTR)pThis
+
pEntries
->
dw);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽pUnk
->
AddRef();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
*
ppvObject聽
=
聽pUnk;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
聽S_OK;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽鎺ュ彛鏄犲皠琛ㄩ」瀹忎負錛?/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;
聽聽聽聽}
聽聽聽
聽聽聽聽聽聽聽聽聽鎺ュ彛鏄犲皠琛ㄩ」瀹忎負錛?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);
聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽鎺ュ彛鏄犲皠琛ㄩ」瀹忎負錛?br />聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽#define聽COM_INTERFACE_ENTRY_TEAR_OFF(iid,聽x)\
聽聽聽聽聽聽聽聽聽聽{&iid,\
聽聽聽聽聽聽聽聽聽聽(DWORD_PTR)&ATL::_CComCreatorData<\
聽聽聽聽聽聽聽聽聽聽聽聽聽聽ATL::CComInternalCreator<聽ATL::CComTearOffObject<聽x聽>聽>\
聽聽聽聽聽聽聽聽聽聽聽聽聽聽>::data,\
聽聽聽聽聽聽聽聽聽聽_Creator},
聽聽聽聽聽聽_ComCreatorData鐨勭浉鍏沖畾涔夊涓嬶細
聽聽聽聽聽聽
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://www.shnenglu.com/HeavenOnProg/aggbug/23233.html" width = "1" height = "1" />
]]>- ATL瀵瑰璞″垱寤虹殑鏀寔http://www.shnenglu.com/HeavenOnProg/archive/2007/04/10/21605.htmlmichaelmichaelTue, 10 Apr 2007 09:36:00 GMThttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/10/21605.htmlhttp://www.shnenglu.com/HeavenOnProg/comments/21605.htmlhttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/10/21605.html#Feedback0http://www.shnenglu.com/HeavenOnProg/comments/commentRss/21605.htmlhttp://www.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聽=聽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;
聽聽聽聽}
};
聽聽聽聽聽聽聽聽聽鈥滃垱寤鴻呪濋氳繃鎻愪緵涓涓潤鎬佸嚱鏁癈reateInstance鏉ュ垱寤烘寚瀹氱被鐨勫疄渚嬶紝騫朵笖鏌ヨ鎸囧畾鐨勬帴鍙c傜涓涓弬鏁板湪瀹炰緥鍖栨櫘閫氬璞″拰class factory瀵硅薄鏃朵細鏈変笉鍚岋細瀵逛簬鏅氬璞★紝閫氬父浼氫紶閫掕仛鍚堝閮ㄥ璞$殑IUnknown鎸囬拡錛屽鏋滄槸闈炶仛鍚堝垱寤猴紝鍙互浼犻扤ULL錛堣瑙丄TL瀵笴OM瀹炰綋韜喚鐨勬敮鎸佸洓錛夛紱紼嶅悗浼氫粙緇嶅湪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;
};
聽聽聽聽聽聽聽聽聽鏍規嵁涓婇潰鐨勮璁猴紝涓涓狢OM綾葷殑鍒涘緩鑰呬細鍍忚繖涓牱瀛愶細
聽聽聽聽聽聽聽聽聽CComCreator<聽CComObject<CMyClass> >
聽聽聽聽聽聽聽聽聽鑰屼竴涓猚lass factory鐨勫垱寤鴻呬細鍍忚繖涓牱瀛愶細
聽聽聽聽聽聽聽聽聽CComCreator< CComCachedObject<CComClassFactory> >銆?br />聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽ATL鍦ㄥ鎴瘋姹傚垱寤篊MyClass瀵硅薄鏃舵墽琛岀殑浼唬鐮佸涓嬶細
聽聽聽聽聽聽聽聽聽
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);

]]> - ATL瀵笴OM瀹炰綋韜喚鐨勬敮鎸侊紙鍥涳級鈥斺?CComObject鍙婂叾浼欎即http://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21408.htmlmichaelmichaelFri, 06 Apr 2007 07:33:00 GMThttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21408.htmlhttp://www.shnenglu.com/HeavenOnProg/comments/21408.htmlhttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21408.html#Feedback0http://www.shnenglu.com/HeavenOnProg/comments/commentRss/21408.htmlhttp://www.shnenglu.com/HeavenOnProg/services/trackbacks/21408.html
聽聽聽聽聽聽鏈変簡CComObjectRootBase銆丆ComObjectRootEx鍜岀嚎紼嬫ā鍨嬬壒寰佺被榪欎簺鍩虹鍘熸枡錛孋ComObject鍜屽畠鐨勪紮浼翠滑渚垮彲浠ヨ嚜鐢辯殑鍙戞尌瀹冧滑鐨勬兂璞′簡銆?br />
1.CComObject 鈥斺?鏅氬爢瀵硅薄聽聽聽聽聽聽
聽聽聽涓嬮潰鏄簿綆鐨凜ComObject妯℃澘綾葷殑瀹氫箟錛毬犅犅犅犅犅?/p>
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
();
};
鈥滄櫘閫氬爢瀵硅薄鈥濇槸浣跨敤鏈涓洪綣佺殑綾伙紝瀹冩湁濡備笅鐗瑰緛錛?br />錛?錛夊湪鍫嗕腑鍒嗛厤鍐呭瓨 鈥斺?璁℃暟褰掗浂鏃剁敤delete閿姣?br />錛?錛夋敮鎸佺嫭绔嬪瓨鍦ㄧ殑瀵硅薄 鈥斺?浣跨敤InternalXXX鏉ュ疄鐜癐Unknown鍔熻兘
錛?錛変駭鐢熸椂閿佸畾鏈嶅姟鍣紝閿姣佹椂瑙i攣鏈嶅姟鍣?鈥斺?閫傜敤浜庡ぇ澶氭暟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)錛?br />
聽聽聽聽CComContainedObject
<
contained
>
聽m_contained;
};
聽 CComAggObject鏈夊涓嬬壒寰侊細
錛?錛夊湪鍫嗕腑鍒嗛厤鍐呭瓨
錛?錛夋敮鎸佽鑱氬悎鑱氬悎鐨勫璞?br />聽聽聽聽聽聽聽聽聽聽聽瀹炵幇浜嗕袱浠絀Unknown錛欳ComAggObject瀹炵幇浜嗗唴閮ㄨ仛鍚堢被鐪熸鐨処Unknown錛屽畠綆$悊瀵硅薄鐨勭敓瀛樻湡錛屽茍涓斿畬鎴愭帴鍙f煡璇紙閫氳繃contained瀵硅薄鐨刜InternalQueryInterface錛夛紱contained瀵硅薄瀹炵幇浜嗗叿鏈夎漿鍙戝姛鑳界殑IUnknown錛屽畠灝嗘墍鏈夌殑璋冪敤杞彂緇機ComAggObject鍦ㄦ瀯閫犲嚱鏁頒腑鏀跺埌鐨勫閮↖Unknown鎸囬拡銆?br />錛?錛変駭鐢熸椂閿佸畾鏈嶅姟鍣紝閿姣佹椂瑙i攣鏈嶅姟鍣?br />
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瀵硅薄鏈夊涓嬬壒寰侊細
錛?錛夊湪鍫嗕腑鍒嗛厤鍐呭瓨
錛?錛夋敮鎸佸湪ATL緇勪歡鍐呴儴浣跨敤鐨則ear-off鎶鏈?br />錛?錛夌敓鎴愭椂閿佸畾鐖跺璞★紝閿姣佹椂瑙i攣鐖跺璞?br />錛?錛夌敓鍛藉懆鏈熺敱鑷繁綆$悊錛屾帴鍙f煡璇㈠鎵樼埗瀵硅薄
4. CComObjectStack 鈥斺?鏍堝璞?br />聽聽聽
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;
};
聽聽聽鏍堝璞℃湁濡備笅鐗瑰緛錛?br />錛?錛夊唴瀛樺垎閰嶄簬鏍堜笂 鈥斺?涓嶉渶瑕佸璞¤冭檻閲婃斁闂
錛?錛夋棤寮曠敤璁℃暟鍔熻兘
錛?錛夋瀯閫犳椂鍒濆鍖?鈥斺?闇瑕佸湪鏋勯犲嚱鏁拌皟鐢ㄥ悗媯鏌_hResFinalConstruct錛屼互鍒ゆ柇瀵硅薄鏄惁鏋勯犳垚鍔?br />錛?錛変笉閿佸畾鏈嶅姟鍣?br />
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;
};
聽聽聽
聽聽聽鍏ㄥ眬瀵硅薄鏈夊涓嬬壒寰侊細
錛?錛夊湪鍏ㄥ眬鏁版嵁鍖哄垎閰嶅唴瀛?br />錛?錛夊垵濮嬪寲鏃朵笉閿佸畾鏈嶅姟鍣紝寮曠敤璁℃暟鍙樺寲鏃舵墠閿佸畾鎴栬呰В閿佹湇鍔″櫒錛岃繖浣垮緱鍏ㄥ眬瀵硅薄鍙互琚敤浜庡叏灞綾誨巶瀵硅薄錛屼互瑙e喅鏈嶅姟鍣ㄥ拰綾誨巶涔嬮棿鐨勬閿侀棶棰?br />錛?錛夋瀯閫犳柟寮忓悓鏍堝璞?br />
聽聽聽榪樻湁涓浜涘叾瀹冪綾葷殑鐢熷瓨鏈熺鐞嗙被錛屽CComObjectNoLock銆丆ComObjectCached銆丆ComPolyObject絳夌瓑錛屽畠浠篃閮芥湁鑷繁鐙埌鐨勭敤澶勶紝鎴戜滑涔熷彲浠ユ牴鎹嚜宸辯殑闇瑕佺紪鍐欒嚜瀹氫箟鐨勭被銆傛諱箣CComObjectRootBase銆丆ComObjectRootEx鍜岀嚎紼嬫ā鍨嬬壒寰佺被灝卞儚鏄Н鏈ㄤ竴鏍鳳紝鎴戜滑鍙互浠繪剰鐨勬妸瀹冧滑緇勫悎鎴愭兂瑕佺殑褰㈢姸銆?img src ="http://www.shnenglu.com/HeavenOnProg/aggbug/21408.html" width = "1" height = "1" />
]]> - ATL瀵笴OM瀹炰綋韜喚鐨勬敮鎸侊紙涓夛級鈥斺?璁塊棶鍚屾鏀寔http://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21403.htmlmichaelmichaelFri, 06 Apr 2007 06:39:00 GMThttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21403.htmlhttp://www.shnenglu.com/HeavenOnProg/comments/21403.htmlhttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21403.html#Feedback0http://www.shnenglu.com/HeavenOnProg/comments/commentRss/21403.htmlhttp://www.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://www.shnenglu.com/HeavenOnProg/aggbug/21403.html" width = "1" height = "1" />
]]> - ATL瀵笴OM瀹炰綋韜喚鐨勬敮鎸侊紙浜岋級鈥斺?CComObjectRootBasehttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21393.htmlmichaelmichaelFri, 06 Apr 2007 05:51:00 GMThttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21393.htmlhttp://www.shnenglu.com/HeavenOnProg/comments/21393.htmlhttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21393.html#Feedback0http://www.shnenglu.com/HeavenOnProg/comments/commentRss/21393.htmlhttp://www.shnenglu.com/HeavenOnProg/services/trackbacks/21393.html涓嬮潰鏄疌ComObjectRootBase鐨勫叧閿唬鐮侊細
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涓昏鍔熻兘鍒嗕負錛?br />錛?錛夋瀯閫犳敮鎸侊細
聽聽聽聽聽聽聽聽聽聽聽聽鍗矲inalConstruct鍜孎inalRelease錛屽畠浠敤浜庡畨鍏ㄧ殑鏋勯犲拰閿姣佸璞°?br />錛?錛夋帴鍙f煡璇㈡敮鎸?br />聽聽聽聽聽聽聽聽聽聽聽聽閫氳繃鎺ュ彛鏄犲皠琛ㄦ潵瀹屾垚鎺ュ彛鏌ヨ鍔熻兘錛岃緇嗗唴瀹硅鍚庨潰鐨勬枃绔犮?br />錛?錛夎仛鍚堢姸鎬佷笅寮曠敤璁℃暟鎿嶄綔鐨勬敮鎸?br />聽聽聽聽聽聽聽聽聽聽聽聽鎻愪緵浜嗗皢IUnknown璇鋒眰濮旀墭緇欏閮ㄧ粍浠剁殑鏀寔銆傚綋瀵硅薄鐙珛瀛樺湪鏃訛紝瀵瑰紩鐢ㄨ鏁版搷浣滅殑鏀寔琚斁緗簬CComObjectRootEx涓紝鍥犱負娑夊強鍒頒簡濂楅棿鍜岃闂悓姝ャ?br />錛?錛夊疄浣撹韓浠芥敮鎸?br />聽聽聽聽聽聽聽聽聽聽聽聽浣垮緱瀵硅薄鍙互鐙珛瀛樺湪鎴栬呰鑱氬悎錛屽洜涓鴻繍琛屾椂鍒誨璞″彧鑳戒互涓縐嶆柟寮忓瓨鍦紝鎵浠ヤ嬌鐢ㄤ簡union銆?img src ="http://www.shnenglu.com/HeavenOnProg/aggbug/21393.html" width = "1" height = "1" />
]]> - ATL瀵笴OM瀹炰綋韜喚鐨勬敮鎸侊紙涓錛夆斺?綾誨眰嬈$粨鏋?/title>http://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.htmlmichaelmichaelFri, 06 Apr 2007 03:46:00 GMThttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.htmlhttp://www.shnenglu.com/HeavenOnProg/comments/21382.htmlhttp://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.html#Feedback0http://www.shnenglu.com/HeavenOnProg/comments/commentRss/21382.htmlhttp://www.shnenglu.com/HeavenOnProg/services/trackbacks/21382.html
聽聽聽聽聽聽聽聽聽聽聽聽涓涓狢OM瀵硅薄蹇呴』瀹炵幇IUnknown鎺ュ彛鎵瑙勫畾鐨勫姛鑳斤紝鍗崇敓鍛芥湡綆$悊鍜岃繍琛屾椂綾誨瀷杞崲銆?br />錛?錛夊熀鏈琁Unknow鍔熻兘
聽聽聽聽聽聽聽聽聽聽聽 瀵硅薄鐨勭敓瀛樻柟寮忓彲浠ユ槸鍫嗗瓨鍌ㄣ佹爤瀛樺偍浠ュ強鍏ㄥ眬瀛樺偍錛屽悓鏃禖OM榪樻彁渚涗簡涓縐嶈鑱氬悎鐨勭敓瀛樻柟寮忋傜敓瀛樻柟寮忎笉鍚岋紝AddRef銆丷elease鍜孮ueryInterface鐨勫疄鐜版柟寮忓氨涓嶅悓銆傛瘮濡傦細瀵逛簬鍫嗘柟寮忥紝Release瑕佸湪寮曠敤璁℃暟褰掗浂鏃惰礋璐i噴鏀懼爢絀洪棿錛岃屾爤浠ュ強鍏ㄥ眬鏂瑰紡鍒欎笉蹇咃紱瀵逛簬鑱氬悎鏂瑰紡錛孉ddRef銆丷elease浠ュ強澶ч儴鍒嗙殑QueryInterface璋冪敤瑕佸鎵樼粰澶栭儴瀵硅薄銆?br />聽聽聽聽聽聽聽聽聽聽聽 涓轟簡杈懼埌瀵硅薄鐨勯昏緫鍔熻兘涓庡叾鐢熷瓨鏂瑰紡鐨勫垎紱伙紝COM鎶婂IUnknown鍩烘湰鍔熻兘鐨勫疄鐜版帹榪熷埌綾誨眰嬈$粨鏋勭殑鏈搴曞眰錛屽嵆CComObject錛堟垨瀹冪殑鍏朵粬浼欎即錛夊銆?br />聽聽聽聽聽聽聽聽聽聽聽 CComObjectRootBase涓篊ComObject鐨勫疄鐜版彁渚涘師鏉愭枡鐨勬敮鎸侊紝濡傛彁渚涘紩鐢ㄨ鏁板彉閲忋佸熀鏈殑鎺ュ彛鏌ヨ鏈哄埗絳夛紝瀹冩槸涓涓滃姛鑳介泦涓被鈥濄?br />錛?錛夊闂村畨鍏ㄦ敮鎸?br />聽聽聽聽聽聽聽聽聽聽聽 鏍規嵁瀵硅薄鎵澶勭殑濂楅棿綾誨瀷錛屽璞″姛鑳界殑瀹炵幇闇瑕佷笉鍚岀殑鍚屾鏀寔銆傚浜庡崟綰跨▼濂楅棿瀵硅薄錛岀敱COM搴撴潵淇濊瘉璁塊棶鐨勫悓姝ワ紱鑰屽浜庡綰跨▼濂楅棿瀵硅薄錛岄渶瑕佽嚜宸辨潵鍚屾璋冪敤銆備負浜嗕嬌濂楅棿瀹夊叏鏀寔涓庨昏緫鍔熻兘鍒嗙錛孉TL鎻愪緵浜嗕竴緇勬彁渚涚嚎紼嬪畨鍏ㄦ搷浣滄敮鎸佺殑鐗瑰緛綾伙紙traits綾伙級鈥斺?CComSingleThreadModel鍙婂叾浼欎即銆傚畠浠彁渚涗簡瀵逛竴涓狶ONG鍙橀噺鈥滄伆濂界嚎紼嬪畨鍏ㄢ濈殑澧炲噺鎿嶄綔錛屼互鍙婅窡濂楅棿綾誨瀷鍖歸厤鐨凜riticalSection鍔熻兘綾匯?br />聽聽聽聽聽聽聽聽聽聽聽 ATL鍚屾椂鎻愪緵浜咰ComObjectRootEx妯℃澘綾伙紝瀹冧互鏌愮ThreadModel鐗瑰緛綾諱綔涓哄弬鏁幫紝鎻愪緵瀵瑰紩鐢ㄨ鏁扳滄伆濂界嚎紼嬪畨鍏ㄢ濈殑鎿嶄綔錛屽茍涓旀彁渚涗簡涓涓敤浜庡璞″悓姝ョ殑閿併?br />聽聽聽聽聽聽聽聽聽聽聽聽PS:鈥滄伆濂界嚎紼嬪畨鍏ㄢ濈殑鎿嶄綔鐨勬剰鎬濇槸錛氬浜庨渶瑕佺嚎紼嬪悓姝ョ殑瀵硅薄錛屾彁渚泈in32 CriticalSection鏀寔錛涘浜庝笉闇瑕佺殑瀵硅薄錛屽垯浠涔堜篃涓嶅仛銆?br />
]]>
国产精品天天影视久久综合网|
亚洲伊人久久综合中文成人网|
久久婷婷五月综合97色一本一本|
久久人妻少妇嫩草AV蜜桃|
久久久久亚洲av无码专区喷水
|
国产韩国精品一区二区三区久久
|
亚洲第一极品精品无码久久|
久久久久人妻一区二区三区vr|
久久被窝电影亚洲爽爽爽|
国内精品久久久久久久coent|
亚洲精品国产自在久久|
国产精品美女久久久久|
久久久久亚洲AV无码专区网站|
亚洲∧v久久久无码精品|
94久久国产乱子伦精品免费|
麻豆精品久久久久久久99蜜桃|
久久久中文字幕|
久久久精品久久久久特色影视|
久久婷婷人人澡人人爽人人爱|
国产精品对白刺激久久久|
中文字幕亚洲综合久久菠萝蜜
|
狠狠色丁香久久综合五月|
久久笫一福利免费导航
|
久久se精品一区精品二区|
97精品伊人久久大香线蕉|
国内精品久久久久久久coent|
日韩乱码人妻无码中文字幕久久
|
久久精品国产免费一区|
日韩人妻无码一区二区三区久久|
久久久久亚洲AV成人网人人软件|
久久天天躁狠狠躁夜夜躁2O2O|
亚洲国产高清精品线久久
|
国产精品99久久久久久宅男小说|
久久久久久综合一区中文字幕|
亚洲国产欧美国产综合久久|
国产99久久久国产精品小说|
久久最新免费视频|
亚洲欧洲精品成人久久曰影片|
内射无码专区久久亚洲|
合区精品久久久中文字幕一区|
久久强奷乱码老熟女网站|