共用方式為


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_CLASSFACTORYXXX 巨集。 例如, 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 提供另外三個宣告類別處理站的巨集:

需求

標頭: 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 可讓用戶端保留至類別處理站,以便快速建立多個物件。

另請參閱

CComObjectRootEx 類別
CComGlobalsThreadModel
類別概觀