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
可讓用戶端保留至類別處理站,以便快速建立多個物件。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應