锘??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 GMT60ATL瀵規帴鍙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" />

michael 2007-04-30 11:37 鍙戣〃璇勮
]]>
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聽
=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瀵硅薄鏃朵細鏈変笉鍚岋細瀵逛簬鏅氬璞★紝閫氬父浼氫紶閫掕仛鍚堝閮ㄥ璞$殑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);


michael 2007-04-10 17:36 鍙戣〃璇勮
]]>
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)()
聽聽聽聽{
聽聽聽聽聽聽聽 return0;
聽聽聽聽}

聽聽聽聽STDMETHOD_(ULONG,聽Release)()
聽聽聽聽{
聽聽聽聽聽聽聽聽return0;
聽聽聽聽}

聽聽聽聽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" />

michael 2007-04-06 15:33 鍙戣〃璇勮
]]>
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" />

michael 2007-04-06 14:39 鍙戣〃璇勮
]]>
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" />

michael 2007-04-06 13:51 鍙戣〃璇勮
]]>
ATL瀵笴OM瀹炰綋韜喚鐨勬敮鎸侊紙涓錛夆斺?綾誨眰嬈$粨鏋?/title><link>http://www.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://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.html</guid><wfw:comment>http://www.shnenglu.com/HeavenOnProg/comments/21382.html</wfw:comment><comments>http://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/HeavenOnProg/comments/commentRss/21382.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/HeavenOnProg/services/trackbacks/21382.html</trackback:ping><description><![CDATA[ <img height="325" alt="ATLComClasses.JPG" src="http://www.shnenglu.com/images/cppblog_com/heavenonprog/ATLComClasses.JPG" width="568" border="0" /> <br />聽聽聽聽聽聽聽聽聽聽聽聽涓涓狢OM瀵硅薄蹇呴』瀹炵幇IUnknown鎺ュ彛鎵瑙勫畾鐨勫姛鑳斤紝鍗崇敓鍛芥湡綆$悊鍜岃繍琛屾椂綾誨瀷杞崲銆?br />錛?錛夊熀鏈琁Unknow鍔熻兘<br />聽聽聽聽聽聽聽聽聽聽聽 瀵硅薄鐨勭敓瀛樻柟寮忓彲浠ユ槸鍫嗗瓨鍌ㄣ佹爤瀛樺偍浠ュ強鍏ㄥ眬瀛樺偍錛屽悓鏃禖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 /><img src ="http://www.shnenglu.com/HeavenOnProg/aggbug/21382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/HeavenOnProg/" target="_blank">michael</a> 2007-04-06 11:46 <a href="http://www.shnenglu.com/HeavenOnProg/archive/2007/04/06/21382.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.goodyd.cn" target="_blank">国产精品天天影视久久综合网</a>| <a href="http://www.fcaiwanzhen.cn" target="_blank">亚洲伊人久久综合中文成人网</a>| <a href="http://www.janba.cn" target="_blank">久久婷婷五月综合97色一本一本</a>| <a href="http://www.fanb1688.com.cn" target="_blank">久久人妻少妇嫩草AV蜜桃</a>| <a href="http://www.qhsy210.cn" target="_blank">久久久久亚洲av无码专区喷水 </a>| <a href="http://www.heizhuai.cn" target="_blank">国产韩国精品一区二区三区久久 </a>| <a href="http://www.fly5.com.cn" target="_blank">亚洲第一极品精品无码久久</a>| <a href="http://www.esld.cn" target="_blank">久久久久人妻一区二区三区vr</a>| <a href="http://www.dj400.cn" target="_blank">久久被窝电影亚洲爽爽爽</a>| <a href="http://www.sportssupport.cn" target="_blank">国内精品久久久久久久coent</a>| <a href="http://www.shangxinju.cn" target="_blank">亚洲精品国产自在久久</a>| <a href="http://www.kongqueyuhn.cn" target="_blank">国产精品美女久久久久</a>| <a href="http://www.fengbiaochem.com.cn" target="_blank">久久久久亚洲AV无码专区网站</a>| <a href="http://www.smxqw.cn" target="_blank">亚洲∧v久久久无码精品</a>| <a href="http://www.acesolo.cn" target="_blank">94久久国产乱子伦精品免费</a>| <a href="http://www.b2721.cn" target="_blank">麻豆精品久久久久久久99蜜桃</a>| <a href="http://www.jsfair.cn" target="_blank">久久久中文字幕</a>| <a href="http://www.puhb.cn" target="_blank">久久久精品久久久久特色影视</a>| <a href="http://www.07sn.cn" target="_blank">久久婷婷人人澡人人爽人人爱</a>| <a href="http://www.hrwp.net.cn" target="_blank">国产精品对白刺激久久久</a>| <a href="http://www.fanglan-tech.cn" target="_blank">中文字幕亚洲综合久久菠萝蜜 </a>| <a href="http://www.ccbaocheng.cn" target="_blank">狠狠色丁香久久综合五月</a>| <a href="http://www.020xyk.cn" target="_blank">久久笫一福利免费导航 </a>| <a href="http://www.nxjinniu.com.cn" target="_blank">久久se精品一区精品二区</a>| <a href="http://www.fcaiwanzhen.cn" target="_blank">97精品伊人久久大香线蕉</a>| <a href="http://www.td265.cn" target="_blank">国内精品久久久久久久coent</a>| <a href="http://www.trademan.cn" target="_blank">日韩乱码人妻无码中文字幕久久 </a>| <a href="http://www.99605.com.cn" target="_blank">久久精品国产免费一区</a>| <a href="http://www.2cafe.cn" target="_blank">日韩人妻无码一区二区三区久久</a>| <a href="http://www.zhtdkh.cn" target="_blank">久久久久亚洲AV成人网人人软件</a>| <a href="http://www.hnjsy.com.cn" target="_blank">久久天天躁狠狠躁夜夜躁2O2O</a>| <a href="http://www.bushenba.cn" target="_blank">亚洲国产高清精品线久久 </a>| <a href="http://www.lawyer010.cn" target="_blank">国产精品99久久久久久宅男小说</a>| <a href="http://www.dashi1.cn" target="_blank">久久久久久综合一区中文字幕</a>| <a href="http://www.trjyzj.cn" target="_blank">亚洲国产欧美国产综合久久</a>| <a href="http://www.ffcchh.com.cn" target="_blank">国产99久久久国产精品小说</a>| <a href="http://www.seostars.cn" target="_blank">久久最新免费视频</a>| <a href="http://www.iconglass.com.cn" target="_blank">亚洲欧洲精品成人久久曰影片</a>| <a href="http://www.21chem.cn" target="_blank">内射无码专区久久亚洲</a>| <a href="http://www.567uu.cn" target="_blank">合区精品久久久中文字幕一区</a>| <a href="http://www.52037872.cn" 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>