CComClassFactory 類別
這個類別會實作 IClassFactory 介面。
語法
class CComClassFactory
: public IClassFactory,
public CComObjectRootEx<CComGlobalsThreadModel>
成員
公用方法
名稱 | 描述 |
---|---|
CComClassFactory::CreateInstance | 建立指定 CLSID 的物件。 |
CComClassFactory::LockServer | 鎖定記憶體中的類別處理站。 |
備註
CComClassFactory
會 實作 IClassFactory 介面,其中包含建立特定 CLSID 物件的方法,以及鎖定記憶體中的類別處理站,以更快速地建立新的物件。 IClassFactory
必須針對您在系統登錄中註冊且指派 CLSID 的每個類別實作。
ATL 物件通常藉由衍生自 CComCoClass 來取得類別處理站。 這個類別包含巨集 DECLARE_CLASSFACTORY,它會宣告 CComClassFactory
為預設類別處理站。 若要覆寫此預設值,請在類別定義中指定其中一個 DECLARE_CLASSFACTORY
XXX 巨集。 例如, DECLARE_CLASSFACTORY_EX 巨集會針對類別處理站使用指定的類別:
class ATL_NO_VTABLE CMyCustomClass :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyCustomClass, &CLSID_MyCustomClass>,
public IDispatchImpl<IMyCustomClass, &IID_IMyCustomClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
DECLARE_CLASSFACTORY_EX(CMyClassFactory)
// Remainder of class declaration omitted.
上述類別定義會 CMyClassFactory
指定將做為對象的預設類別處理站。 CMyClassFactory
必須衍生自 CComClassFactory
並覆寫 CreateInstance
。
ATL 提供另外三個宣告類別處理站的巨集:
DECLARE_CLASSFACTORY2使用 CComClassFactory2,控制透過授權建立。
DECLARE_CLASSFACTORY_AUTO_THREAD使用 CComClassFactoryAutoThread,這會在多個 Apartment 中建立物件。
DECLARE_CLASSFACTORY_SINGLETON使用 CComClassFactorySingleton,它會建構單一 CComObjectGlobal 物件。
需求
標頭: atlcom.h
CComClassFactory::CreateInstance
建立指定 CLSID 的物件,並擷取這個物件的介面指標。
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
參數
pUnkOuter
[in]如果物件正在建立為匯總的一部分,則 pUnkOuter 必須是外部未知的。 否則, pUnkOuter 必須是 NULL。
riid
[in]所要求介面的 IID。 如果 pUnkOuter 不是 NULL,riid 必須是 IID_IUnknown
。
ppvObj
[out]riid 所識別之介面指標的指標。 如果物件不支持這個介面, ppvObj 會設定為 NULL。
傳回值
標準 HRESULT 值。
CComClassFactory::LockServer
藉由分別呼叫 _Module::Lock
和 _Module::Unlock
來遞增和遞減模組鎖定計數。
STDMETHOD(LockServer)(BOOL fLock);
參數
羊群
[in]如果為 TRUE,則會遞增鎖定計數;否則,鎖定計數會遞減。
傳回值
標準 HRESULT 值。
備註
_Module
是指 CComModule 的全域實例或衍生自它的類別。
呼叫 LockServer
可讓用戶端保留至類別處理站,以便快速建立多個物件。