亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cmpnt2.cpp

?? COM技術內幕配書源碼
?? CPP
字號:
//
// Cmpnt2.cpp - Component 2
//   Note the changes in the class factory marked with @N.
//
#include <iostream.h>
#include <objbase.h>

#include "Iface.h"
#include "Registry.h"

void trace(const char* msg) { cout << "Component 2:\t" << msg << endl ;}

///////////////////////////////////////////////////////////
//
// Global variables
//

// Static variables
static HMODULE g_hModule = NULL ;   // DLL module handle
static long g_cComponents = 0 ;     // Count of active components
static long g_cServerLocks = 0 ;    // Count of locks

// Friendly name of component
const char g_szFriendlyName[]
	= "Inside COM, Chapter 8 Example 2, Component 2" ;

// Version-independent ProgID
const char g_szVerIndProgID[] = "InsideCOM.Chap08.Ex2.Cmpnt2" ;

// ProgID
const char g_szProgID[] = "InsideCOM.Chap08.Ex2.Cmpnt2.1" ;

///////////////////////////////////////////////////////////
//
// Nondelegating IUnknown interface  @N
//
struct INondelegatingUnknown
{
	virtual HRESULT __stdcall
		NondelegatingQueryInterface(const IID&, void**) = 0 ;
	virtual ULONG __stdcall NondelegatingAddRef() = 0 ;
	virtual ULONG __stdcall NondelegatingRelease() = 0 ;
} ;

///////////////////////////////////////////////////////////
//
// Component 
//
class CB : public IY,
           public INondelegatingUnknown
{
public:
	// Delegating IUnknown
	virtual HRESULT __stdcall
		QueryInterface(const IID& iid, void** ppv)
	{
		trace("Delegate QueryInterface.") ;
		return m_pUnknownOuter->QueryInterface(iid, ppv) ; 
	}

	virtual ULONG __stdcall AddRef() 
	{
		trace("Delegate AddRef.") ;
		return m_pUnknownOuter->AddRef() ; 
	}

	virtual ULONG __stdcall Release() 
	{
		trace("Delegate Release.") ;
		return m_pUnknownOuter->Release() ; 
	}

	// Nondelegating IUnknown
	virtual HRESULT __stdcall
		NondelegatingQueryInterface(const IID& iid, void** ppv) ;
	virtual ULONG   __stdcall NondelegatingAddRef() ;
	virtual ULONG   __stdcall NondelegatingRelease() ;

	// Interface IY
	virtual void __stdcall Fy() { cout << "Fy" << endl ;}

	// Constructor
	CB(IUnknown* m_pUnknownOuter) ;

	// Destructor
	~CB() ;

private:
	long m_cRef ;
	
	IUnknown* m_pUnknownOuter ;
} ;

//
// IUnknown implementation
//
HRESULT __stdcall CB::NondelegatingQueryInterface(const IID& iid,
                                                  void** ppv)
{ 	
	if (iid == IID_IUnknown)
	{
		// !!! CAST IS VERY IMPORTANT !!!
		*ppv = static_cast<INondelegatingUnknown*>(this) ;  // @N
	}
	else if (iid == IID_IY)
	{
		*ppv = static_cast<IY*>(this) ;
	}
	else
	{
		*ppv = NULL ;
		return E_NOINTERFACE ;
	}
	reinterpret_cast<IUnknown*>(*ppv)->AddRef() ;
	return S_OK ;
}

ULONG __stdcall CB::NondelegatingAddRef()
{
	return ::InterlockedIncrement(&m_cRef) ;
}

ULONG __stdcall CB::NondelegatingRelease() 
{
	if (::InterlockedDecrement(&m_cRef) == 0)
	{
		delete this ;
		return 0 ;
	}
	return m_cRef ;
}

//
// Constructor
//
CB::CB(IUnknown* pUnknownOuter) 
: m_cRef(1)
{ 
	::InterlockedIncrement(&g_cComponents) ; 

	if (pUnknownOuter == NULL)
	{
		trace("Not aggregating; delegate to nondelegating IUnknown.") ;
		m_pUnknownOuter = reinterpret_cast<IUnknown*>
		                  (static_cast<INondelegatingUnknown*>
		                  (this)) ;
	}
	else
	{
		trace("Aggregating; delegate to outer IUnknown.") ;
		m_pUnknownOuter = pUnknownOuter ;
	}
}

//
// Destructor
//
CB::~CB() 
{ 
	::InterlockedDecrement(&g_cComponents) ; 
	trace("Destroy self.") ;
}

///////////////////////////////////////////////////////////
//
// Class factory
//
class CFactory : public IClassFactory
{
public:
	// IUnknown
	virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv) ;
	virtual ULONG   __stdcall AddRef() ;
	virtual ULONG   __stdcall Release() ;

	// Interface IClassFactory
	virtual HRESULT __stdcall CreateInstance(IUnknown* pUnknownOuter,
	                                         const IID& iid,
	                                         void** ppv) ;
	virtual HRESULT __stdcall LockServer(BOOL bLock) ; 

	// Constructor
	CFactory() : m_cRef(1) {}

	// Destructor
	~CFactory() {}
	
private:
	long m_cRef ;
} ;

//
// Class factory IUnknown implementation
//
HRESULT __stdcall CFactory::QueryInterface(const IID& iid, void** ppv)
{ 	
	if ((iid == IID_IUnknown) || (iid == IID_IClassFactory))
	{
		*ppv = static_cast<IClassFactory*>(this) ; 
	}
	else
	{
		*ppv = NULL ;
		return E_NOINTERFACE ;
	}
	reinterpret_cast<IUnknown*>(*ppv)->AddRef() ;
	return S_OK ;
}

ULONG __stdcall CFactory::AddRef()
{
	return ::InterlockedIncrement(&m_cRef) ;
}

ULONG __stdcall CFactory::Release() 
{
	if (::InterlockedDecrement(&m_cRef) == 0)
	{
		delete this ;
		return 0 ;
	}
	return m_cRef ;
}

//
// IClassFactory implementation
//
HRESULT __stdcall CFactory::CreateInstance(IUnknown* pUnknownOuter,
	                                   const IID& iid,
	                                   void** ppv)
{
	// Aggregate only if the requested iid is IID_IUnknown.
	if ((pUnknownOuter != NULL) && (iid != IID_IUnknown)) //@N
	{
		return CLASS_E_NOAGGREGATION ;
	}
	
	// Create component.
	CB* pB = new CB(pUnknownOuter) ; // @N
	if (pB == NULL)
	{
		return E_OUTOFMEMORY ;
	}
	
	// Get the requested interface.
	HRESULT hr = pB->NondelegatingQueryInterface(iid, ppv) ; //@N
	pB->NondelegatingRelease() ; 
	return hr ;   
}

// LockServer
HRESULT __stdcall CFactory::LockServer(BOOL bLock) 
{
	if (bLock) 
	{
		::InterlockedIncrement(&g_cServerLocks) ; 
	}
	else
	{
		::InterlockedDecrement(&g_cServerLocks) ;
	}
	return S_OK ;
}


///////////////////////////////////////////////////////////
//
// Exported functions
//

STDAPI DllCanUnloadNow()
{
	if ((g_cComponents == 0) && (g_cServerLocks == 0))
	{
		return S_OK ;
	}
	else
	{
		return S_FALSE ;
	}
}

//
// Get class factory.
//
STDAPI DllGetClassObject(const CLSID& clsid,
                         const IID& iid,
                         void** ppv) 
{
	// Can we create this component?
	if (clsid != CLSID_Component2)
	{
		return CLASS_E_CLASSNOTAVAILABLE ;
	}

	// Create class factory.
	CFactory* pFactory = new CFactory ; // No Addref in constructor
	if (pFactory == NULL)
	{
		return E_OUTOFMEMORY ;
	}

	// Get requested interface.
	HRESULT hr = pFactory->QueryInterface(iid, ppv) ;
	pFactory->Release() ;

	return hr ;	   
}

//
// Server registration
//
STDAPI DllRegisterServer()
{
	return RegisterServer(g_hModule,
	                      CLSID_Component2, 
	                      g_szFriendlyName,
	                      g_szVerIndProgID,
	                      g_szProgID) ;
}


STDAPI DllUnregisterServer()
{
	return UnregisterServer(CLSID_Component2,
	                        g_szVerIndProgID,
	                        g_szProgID) ;
}

///////////////////////////////////////////////////////////
//
// DLL module information
//
BOOL APIENTRY DllMain(HANDLE hModule,
                      DWORD dwReason,
                      void* lpReserved)
{
	if (dwReason == DLL_PROCESS_ATTACH)
	{
		g_hModule = hModule ;
	}
	return TRUE ;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人免费视频网站| 久久久不卡影院| 亚洲综合无码一区二区| 91免费看`日韩一区二区| 久久精品人人做人人爽人人| 日韩电影在线观看电影| 欧美日韩美少妇| 亚洲国产中文字幕| 欧美日韩一区二区三区视频| 欧美激情一二三区| 精品一区二区在线看| 欧美人成免费网站| 亚洲综合在线视频| 337p亚洲精品色噜噜噜| 欧美午夜一区二区| 麻豆国产精品官网| 精品乱人伦小说| caoporm超碰国产精品| 亚洲欧美欧美一区二区三区| 日本韩国精品一区二区在线观看| 一区二区三区在线观看动漫| 精品视频免费在线| 紧缚捆绑精品一区二区| 国产网红主播福利一区二区| 国产盗摄精品一区二区三区在线| 中文字幕欧美日本乱码一线二线| 91视频免费观看| 久久99精品一区二区三区三区| 国产亚洲精久久久久久| 欧美三级电影在线观看| 国产风韵犹存在线视精品| 亚洲v日本v欧美v久久精品| 久久精品人人做人人爽97| 色94色欧美sute亚洲线路一久| 久久99精品国产.久久久久久| 亚洲欧美激情插| www久久精品| 欧美喷潮久久久xxxxx| 国产99久久久国产精品潘金网站| 国产精品久久三| www国产成人免费观看视频 深夜成人网| 国产成人鲁色资源国产91色综| 中文字幕亚洲在| 午夜视频一区在线观看| 亚洲精品在线观看视频| 欧美中文字幕亚洲一区二区va在线| 国产一区视频在线看| 久久疯狂做爰流白浆xx| 免费观看91视频大全| 午夜精品福利一区二区三区av| 亚洲狼人国产精品| 中文字幕一区二区三区四区| 国产精品久久久久久久岛一牛影视 | 中文字幕欧美国产| 国产欧美一区二区精品性色| 欧美日韩一区在线| 欧美精品一区二区高清在线观看| 日韩精品中文字幕在线一区| 日韩精品一区二区三区蜜臀| wwwwww.欧美系列| 国产日韩欧美电影| 一区在线中文字幕| 亚洲国产成人高清精品| 午夜精品爽啪视频| 激情综合网天天干| 成人国产在线观看| 在线观看成人小视频| 欧美成人官网二区| 久久亚洲精品小早川怜子| 久久久久国产成人精品亚洲午夜| 国产精品理论片| 蜜臀va亚洲va欧美va天堂| 国产河南妇女毛片精品久久久| 97久久精品人人澡人人爽| 精品婷婷伊人一区三区三| 日韩手机在线导航| 成人欧美一区二区三区在线播放| 亚洲免费av网站| 久久精品99国产精品日本| 国产麻豆日韩欧美久久| 日韩视频免费观看高清完整版在线观看| 久久久久九九视频| 日韩黄色片在线观看| 不卡视频在线观看| 精品国产自在久精品国产| 国产精品久久久99| 国产美女在线精品| 日韩欧美中文字幕公布| 中文字幕欧美一| 国产福利不卡视频| 欧美zozozo| 久久国产精品无码网站| 制服丝袜成人动漫| 香蕉久久一区二区不卡无毒影院| 国产1区2区3区精品美女| 日韩写真欧美这视频| 石原莉奈一区二区三区在线观看| 东方欧美亚洲色图在线| 久久精品欧美日韩精品 | 国产婷婷色一区二区三区| 免费在线观看日韩欧美| 欧美色综合影院| 偷偷要91色婷婷| 日韩精品一区二区三区蜜臀| 麻豆精品一二三| 久久久久久久久久久电影| 韩国一区二区在线观看| 精品国产一二三| 国产 欧美在线| 亚洲免费在线播放| 91精品国产综合久久久久久久久久| 亚洲精品国产a| 欧美日韩久久一区二区| 久久99精品久久久久久动态图| 欧美r级在线观看| 成人免费视频一区| 一级做a爱片久久| 欧美不卡一二三| 成人动漫中文字幕| 亚洲第一狼人社区| 久久日韩精品一区二区五区| 国产69精品一区二区亚洲孕妇| 中文字幕亚洲一区二区va在线| 欧美日韩一区二区三区免费看| 日韩成人精品在线观看| 国产精品灌醉下药二区| 日韩一区二区电影网| 一本大道综合伊人精品热热| 美女mm1313爽爽久久久蜜臀| 国产精品热久久久久夜色精品三区| 91蝌蚪porny| 成人性色生活片免费看爆迷你毛片| 天天射综合影视| 亚洲制服丝袜av| 亚洲人成电影网站色mp4| 91精品综合久久久久久| 色88888久久久久久影院按摩| 国产麻豆日韩欧美久久| 亚洲日本免费电影| 精品国产91久久久久久久妲己 | 日本vs亚洲vs韩国一区三区| 中文字幕中文字幕一区| 久久久午夜精品| 欧美一区二区三区公司| 欧美精品在线观看播放| 色婷婷综合五月| 99久久精品国产导航| 国产一区二区久久| 日本aⅴ精品一区二区三区| 天天色天天操综合| 亚洲午夜精品在线| 亚洲欧洲日本在线| 亚洲精品国产无天堂网2021| 亚洲欧美日韩国产中文在线| 亚洲欧洲三级电影| 亚洲综合图片区| 琪琪一区二区三区| 毛片一区二区三区| 黄一区二区三区| 国产伦精品一区二区三区视频青涩 | 色悠久久久久综合欧美99| 91福利资源站| 一卡二卡三卡日韩欧美| 777午夜精品免费视频| 精品在线一区二区| 日本一区二区电影| 欧美午夜理伦三级在线观看| 麻豆精品新av中文字幕| 久久久国产精华| 欧美最新大片在线看| 日本aⅴ亚洲精品中文乱码| 国产农村妇女精品| 欧美唯美清纯偷拍| 国产精品一区三区| 亚洲国产日韩精品| 精品国产乱码久久久久久图片| 成人国产精品免费观看动漫| 亚洲国产精品久久久久秋霞影院| 欧美精品一区二区三区蜜桃视频| 91免费视频大全| 激情都市一区二区| 亚洲一区在线观看视频| 久久久噜噜噜久久中文字幕色伊伊| 成人国产精品视频| 麻豆成人久久精品二区三区小说| 中文字幕中文乱码欧美一区二区| 欧美人妇做爰xxxⅹ性高电影| 高清免费成人av| 免费成人av资源网| 一区二区三区四区乱视频| xfplay精品久久| 欧美精品v国产精品v日韩精品| 成人深夜视频在线观看| 麻豆一区二区99久久久久| 一区二区三区资源| 国产精品视频在线看| 日韩亚洲欧美高清| 欧美日韩久久不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 久久国产精品72免费观看|