⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfactory.h

📁 COM技术内幕源码 ,随书原码
💻 H
字号:
#ifndef __CFactory_h__#define __CFactory_h__#include "CUnknown.h"/////////////////////////////////////////////////////////// // Forward referenceclass CFactoryData ;// Global data used by CFactoryextern CFactoryData g_FactoryDataArray[] ;extern int g_cFactoryDataEntries ;//////////////////////////////////////////////////////////////  Component creation function//class CUnknown ;typedef HRESULT (*FPCREATEINSTANCE)(IUnknown*, CUnknown**) ;/////////////////////////////////////////////////////////////// CFactoryData//   - Information CFactory needs to create a component//     supported by the DLL//class CFactoryData{public:	// The class ID for the component	const CLSID* m_pCLSID ;	// Pointer to the function that creates it	FPCREATEINSTANCE CreateInstance ;	// Name of the component to register in the registry	const char* m_RegistryName ;	// ProgID	const char* m_szProgID ;	// Version-independent ProgID	const char* m_szVerIndProgID ;	// Helper function for finding the class ID	BOOL IsClassID(const CLSID& clsid) const		{ return (*m_pCLSID == clsid) ;}	// Type Library ID	const GUID* m_pLIBID ;	//	// Out of process server support	//	// Pointer to running class factory for this component	IClassFactory* m_pIClassFactory ;	// Magic cookie to identify running object	DWORD m_dwRegister ;} ;/////////////////////////////////////////////////////////////// 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() ;		// IClassFactory	virtual HRESULT __stdcall CreateInstance(IUnknown* pUnknownOuter,	                                         const IID& iid,	                                         void** ppv) ;	virtual HRESULT __stdcall LockServer(BOOL bLock) ; 	// Constructor - Pass pointer to data of component to create.	CFactory(const CFactoryData* pFactoryData) ;	// Destructor	~CFactory() { }	//	// Static FactoryData support functions	//	// DllGetClassObject support	static HRESULT GetClassObject(const CLSID& clsid, 	                              const IID& iid, 	                              void** ppv) ;	// Helper function for DllCanUnloadNow  	static BOOL IsLocked()		{ return (s_cServerLocks > 0) ;}	// Functions to [un]register all components	static HRESULT RegisterAll() ;	static HRESULT UnregisterAll() ;	// Function to determine if component can be unloaded	static HRESULT CanUnloadNow() ;#ifdef _OUTPROC_SERVER_	//	// Out-of-process server support	//	static BOOL StartFactories() ;	static void StopFactories() ;	static DWORD s_dwThreadID ;	// Shut down the application.	static void CloseExe()	{		if (CanUnloadNow() == S_OK)		{			::PostThreadMessage(s_dwThreadID, WM_QUIT, 0, 0) ;		}	}#else	// CloseExe doesn't do anything if we are in process.	static void CloseExe() { /*Empty*/ } #endifpublic:	// Reference Count	LONG m_cRef ;	// Pointer to information about class this factory creates	const CFactoryData* m_pFactoryData ;	// Count of locks	static LONG s_cServerLocks ;   	// Module handle	static HMODULE s_hModule ;} ;#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -