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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cfactory.cpp

?? COM技術(shù)內(nèi)幕配書(shū)源碼
?? CPP
字號(hào):
///////////////////////////////////////////////////////////
//
// CFactory
//   - Base class for reusing a single class factory for
//     all components in a DLL
//
#include <objbase.h>

#include "Registry.h"
#include "CFactory.h"

///////////////////////////////////////////////////////////
//
// Static variables
//
LONG CFactory::s_cServerLocks = 0 ;    // Count of locks

HMODULE CFactory::s_hModule = NULL ;   // DLL module handle

#ifdef _OUTPROC_SERVER_
DWORD CFactory::s_dwThreadID = 0 ;
#endif

///////////////////////////////////////////////////////////
//
// CFactory implementation
//

CFactory::CFactory(const CFactoryData* pFactoryData)
: m_cRef(1)
{
	m_pFactoryData = pFactoryData ;
}

//
// IUnknown implementation
//
HRESULT __stdcall CFactory::QueryInterface(REFIID iid, void** ppv)
{ 	
	IUnknown* pI ;
	if ((iid == IID_IUnknown) || (iid == IID_IClassFactory))
	{
		pI = this ; 
	}
	else
	{
	   *ppv = NULL;
		return E_NOINTERFACE;
	}
	pI->AddRef() ;
	*ppv = pI ;
	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))
	{
		return CLASS_E_NOAGGREGATION ;
	}

	// Create the component.
	CUnknown* pNewComponent ;
	HRESULT hr = m_pFactoryData->CreateInstance(pUnknownOuter,
	                                            &pNewComponent) ;
	if (FAILED(hr))
	{
		return hr ;
	}

	// Initialize the component.
	hr = pNewComponent->Init();
	if (FAILED(hr))
	{
		// Initialization failed.  Release the component.
		pNewComponent->NondelegatingRelease() ;
		return hr ;
	}
	
	// Get the requested interface.
	hr = pNewComponent->NondelegatingQueryInterface(iid, ppv) ;

	// Release the reference held by the class factory.
	pNewComponent->NondelegatingRelease() ;
	return hr ;   
}

// LockServer
HRESULT __stdcall CFactory::LockServer(BOOL bLock) 
{
	if (bLock) 
	{
		::InterlockedIncrement(&s_cServerLocks) ; 
	}
	else
	{
		::InterlockedDecrement(&s_cServerLocks) ;
	}
	// If this is an out-of-proc server, check to see
	// whether we should shut down.
	CloseExe() ;  //@local

	return S_OK ;
}


///////////////////////////////////////////////////////////
//
// GetClassObject
//   - Create a class factory based on a CLSID.
//
HRESULT CFactory::GetClassObject(const CLSID& clsid, 
                                 const IID& iid, 
                                 void** ppv)
{
	if ((iid != IID_IUnknown) && (iid != IID_IClassFactory))
	{
		return E_NOINTERFACE ;
	}

	// Traverse the array of data looking for this class ID.
	for (int i = 0; i < g_cFactoryDataEntries; i++)
	{
		const CFactoryData* pData = &g_FactoryDataArray[i] ;
		if (pData->IsClassID(clsid))
		{

			// Found the ClassID in the array of components we can
			// create. So create a class factory for this component.
			// Pass the CFactoryData structure to the class factory
			// so that it knows what kind of components to create.
			*ppv = (IUnknown*) new CFactory(pData) ;
			if (*ppv == NULL)
			{
				return E_OUTOFMEMORY ;
			}
			return NOERROR ;
		}
	}
	return CLASS_E_CLASSNOTAVAILABLE ;
}

//
// Determine if the component can be unloaded.
//
HRESULT CFactory::CanUnloadNow()
{
	if (CUnknown::ActiveComponents() || IsLocked())
	{
		return S_FALSE ;
	}
	else
	{
		return S_OK ;
	}
}

//
// Register all components.
//
HRESULT CFactory::RegisterAll()
{
	for(int i = 0 ; i < g_cFactoryDataEntries ; i++)
	{
		RegisterServer(s_hModule,
		               *(g_FactoryDataArray[i].m_pCLSID),
		               g_FactoryDataArray[i].m_RegistryName,
		               g_FactoryDataArray[i].m_szVerIndProgID, 
		               g_FactoryDataArray[i].m_szProgID) ;
	}
	return S_OK ;
}   
	
HRESULT CFactory::UnregisterAll()
{
	for(int i = 0 ; i < g_cFactoryDataEntries ; i++)   
	{
		UnregisterServer(*(g_FactoryDataArray[i].m_pCLSID),
		                 g_FactoryDataArray[i].m_szVerIndProgID, 
		                 g_FactoryDataArray[i].m_szProgID) ;
	}
	return S_OK ;
}

#ifndef _OUTPROC_SERVER_
//////////////////////////////////////////////////////////
//
// Exported functions
//

STDAPI DllCanUnloadNow()
{
	return CFactory::CanUnloadNow() ; 
}

//
// Get class factory
//
STDAPI DllGetClassObject(const CLSID& clsid,
                         const IID& iid,
                         void** ppv) 
{
	return CFactory::GetClassObject(clsid, iid, ppv) ;
}

//
// Server registration
//
STDAPI DllRegisterServer()
{
	return CFactory::RegisterAll() ;
}


STDAPI DllUnregisterServer()
{
	return CFactory::UnregisterAll() ;
}

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

#else
//////////////////////////////////////////////////////////
//
// Out of process Server support
//

//
// Start factories
//
BOOL CFactory::StartFactories()
{
	CFactoryData* pStart = &g_FactoryDataArray[0] ;
	const CFactoryData* pEnd =
		&g_FactoryDataArray[g_cFactoryDataEntries - 1] ;

	for(CFactoryData* pData = pStart ; pData <= pEnd ; pData++)
	{
		// Initialize the class factory pointer and cookie.
		pData->m_pIClassFactory = NULL ;
		pData->m_dwRegister = NULL ;

		// Create the class factory for this component.
		IClassFactory* pIFactory = new CFactory(pData) ;

		// Register the class factory.
		DWORD dwRegister ;
		HRESULT hr = ::CoRegisterClassObject(
		                  *pData->m_pCLSID,
		                  static_cast<IUnknown*>(pIFactory),
		                  CLSCTX_LOCAL_SERVER,
		                  REGCLS_MULTIPLEUSE,
		                  // REGCLS_MULTI_SEPARATE, //@Multi
		                  &dwRegister) ;
		if (FAILED(hr))
		{
			pIFactory->Release() ;
			return FALSE ;
		}

		// Set the data.
		pData->m_pIClassFactory = pIFactory ;
		pData->m_dwRegister = dwRegister ;
	}
	return TRUE ;
}

//
// Stop factories
//
void CFactory::StopFactories()
{
	CFactoryData* pStart = &g_FactoryDataArray[0] ;
	const CFactoryData* pEnd =
		&g_FactoryDataArray[g_cFactoryDataEntries - 1] ;

	for (CFactoryData* pData = pStart ; pData <= pEnd ; pData++)
	{
		// Get the magic cookie and stop the factory from running.
		DWORD dwRegister = pData->m_dwRegister ;
		if (dwRegister != 0) 
		{
			::CoRevokeClassObject(dwRegister) ;
		}

		// Release the class factory.
		IClassFactory* pIFactory  = pData->m_pIClassFactory ;
		if (pIFactory != NULL) 
		{
			pIFactory->Release() ;
		}
	}
}

#endif //_OUTPROC_SERVER_

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人高清伦理免费影院在线观看| 国产在线播放一区三区四| 91一区二区三区在线观看| 欧美激情在线一区二区| 国产综合成人久久大片91| 日韩欧美一区在线| 日本成人在线网站| 91精品国产综合久久久久| 午夜精品免费在线| 88在线观看91蜜桃国自产| 午夜激情久久久| 欧美老女人第四色| 日本亚洲欧美天堂免费| 日韩一级高清毛片| 久久99国产精品久久99果冻传媒| 日韩免费高清电影| 韩国在线一区二区| 国产日本亚洲高清| av中文字幕不卡| 一区二区三区中文字幕精品精品 | 一区二区三区四区精品在线视频| 99re成人在线| 亚洲视频图片小说| 在线视频一区二区免费| 香蕉久久夜色精品国产使用方法| 欧美三级一区二区| 美女在线视频一区| 久久综合成人精品亚洲另类欧美| 国产美女娇喘av呻吟久久| 国产色产综合色产在线视频| heyzo一本久久综合| 亚洲欧美欧美一区二区三区| 欧美日韩一区久久| 美女网站视频久久| 久久久精品免费网站| 从欧美一区二区三区| 欧美区视频在线观看| 免费高清不卡av| 国产欧美一区二区精品忘忧草 | 欧美另类久久久品| 美洲天堂一区二卡三卡四卡视频| 久久久无码精品亚洲日韩按摩| 粉嫩aⅴ一区二区三区四区五区| 亚洲欧洲精品一区二区三区| 欧美日韩在线亚洲一区蜜芽| 精品综合久久久久久8888| 国产欧美日韩在线看| 日本韩国欧美在线| 青青草国产成人99久久| 国产丝袜在线精品| 欧美四级电影在线观看| 久久国产婷婷国产香蕉| 国产精品日产欧美久久久久| 在线观看日韩一区| 久久精品国产秦先生| 自拍偷拍国产精品| 欧美一区二区私人影院日本| 高清视频一区二区| 天天综合色天天综合| 欧美精品一区二区三区在线 | 国产精品资源在线看| 亚洲精品视频免费看| 日韩欧美一区在线观看| 波多野结衣视频一区| 天天色综合成人网| 国产精品青草久久| 这里只有精品电影| 成人国产一区二区三区精品| 婷婷久久综合九色综合绿巨人| 久久精品在这里| 欧美日韩国产首页| 成人av在线资源| 久久av老司机精品网站导航| **性色生活片久久毛片| 日韩精品中午字幕| 日本福利一区二区| 国产一区二区剧情av在线| 亚洲国产婷婷综合在线精品| 国产清纯白嫩初高生在线观看91 | 一色桃子久久精品亚洲| 7777女厕盗摄久久久| 99久久国产综合色|国产精品| 免费观看日韩电影| 亚洲一区二区精品3399| 欧美国产精品久久| 精品久久久久一区| 欧美日本在线看| 日本丶国产丶欧美色综合| 国产成人午夜精品5599| 免费高清在线视频一区·| 亚洲激情校园春色| 国产日产亚洲精品系列| 国产日产亚洲精品系列| 99视频有精品| 国产一区亚洲一区| 日韩中文字幕麻豆| 亚洲猫色日本管| 国产精品乱人伦中文| 精品久久久网站| 欧美一区二区三区视频在线观看| 在线免费亚洲电影| 成人国产精品免费观看| 国产剧情一区在线| 蜜臀av性久久久久蜜臀av麻豆| 亚洲福利视频一区二区| 亚洲精品v日韩精品| 国产精品国产精品国产专区不蜜| 精品免费视频.| 日韩欧美成人午夜| 欧美久久久久免费| 欧美日韩亚洲综合| 欧美亚洲综合一区| 欧美在线观看一二区| 色狠狠桃花综合| 日本久久一区二区| 日本韩国欧美在线| 色婷婷国产精品| av成人老司机| 91视视频在线观看入口直接观看www| 成人丝袜高跟foot| 韩国v欧美v亚洲v日本v| 美女一区二区视频| 美腿丝袜亚洲三区| 免费精品视频在线| 久久丁香综合五月国产三级网站| 男人的j进女人的j一区| 日韩电影在线免费观看| 日本午夜精品一区二区三区电影| 午夜日韩在线观看| 亚洲va欧美va天堂v国产综合| 亚洲国产日韩一区二区| 亚洲小说欧美激情另类| 午夜精品久久久久| 青青草一区二区三区| 久久精品99国产精品| 国产一区免费电影| 国产成人午夜视频| www.色综合.com| 日本二三区不卡| 欧美区视频在线观看| 日韩欧美中文字幕公布| xnxx国产精品| 日本一区二区动态图| 国产精品欧美经典| 亚洲男人天堂av| 亚洲.国产.中文慕字在线| 日一区二区三区| 美女精品一区二区| 国产成人8x视频一区二区| jiyouzz国产精品久久| 在线视频亚洲一区| 欧美一卡二卡在线| 久久久综合九色合综国产精品| 亚洲国产岛国毛片在线| 亚洲免费观看高清在线观看| 亚洲综合色成人| 免费在线观看一区| 国产成人午夜精品影院观看视频| 91影院在线观看| 欧美日韩国产色站一区二区三区| 91精品国产91热久久久做人人| 精品国产乱码久久久久久牛牛| 日本一区二区动态图| 亚洲综合免费观看高清在线观看| 日韩在线一区二区三区| 激情文学综合插| 99精品视频在线播放观看| 欧美三级韩国三级日本三斤| 欧美在线观看视频在线| 7777女厕盗摄久久久| 国产亚洲一区二区在线观看| 亚洲天堂成人在线观看| 日韩黄色免费网站| 国产激情精品久久久第一区二区| 91免费看`日韩一区二区| 制服丝袜亚洲播放| 欧美国产日产图区| 五月婷婷综合网| 国产成人aaa| 欧美日韩精品一区二区三区| 精品美女在线播放| 亚洲免费观看高清完整版在线| 麻豆91精品视频| av中文字幕在线不卡| 日韩欧美一级片| 亚洲男同1069视频| 狠狠久久亚洲欧美| 在线观看一区二区精品视频| 久久这里只有精品视频网| 夜夜揉揉日日人人青青一国产精品| 久久精品国产色蜜蜜麻豆| 91在线精品一区二区三区| 日韩视频免费观看高清完整版在线观看 | 国产精品福利影院| 午夜激情一区二区三区| 成人18视频日本| 欧美sm极限捆绑bd| 一区二区视频在线| 国产精品影视在线| 制服.丝袜.亚洲.中文.综合|