Condividi tramite


Classe CComClassFactory

Questa classe implementa l'interfaccia IClassFactory .

Sintassi

class CComClassFactory
    : public IClassFactory,
      public CComObjectRootEx<CComGlobalsThreadModel>

Membri

Metodi pubblici

Nome Descrizione
CComClassFactory::CreateInstance Crea un oggetto del CLSID specificato.
CComClassFactory::LockServer Blocca la class factory in memoria.

Osservazioni:

CComClassFactory implementa l'interfaccia IClassFactory , che contiene metodi per la creazione di un oggetto di un particolare CLSID, nonché il blocco della class factory in memoria per consentire la creazione di nuovi oggetti più rapidamente. IClassFactory deve essere implementato per ogni classe registrata nel Registro di sistema e a cui si assegna un CLSID.

Gli oggetti ATL acquisiscono normalmente una class factory derivando da CComCoClass. Questa classe include la macro DECLARE_CLASSFACTORY, che dichiara CComClassFactory come class factory predefinita. Per eseguire l'override di questa impostazione predefinita, specificare una delle DECLARE_CLASSFACTORYmacro XXX nella definizione della classe. Ad esempio, la macro DECLARE_CLASSFACTORY_EX usa la classe specificata per la class factory:

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.

La definizione della classe precedente specifica che CMyClassFactory verrà usata come class factory predefinita dell'oggetto. CMyClassFactory deve derivare da CComClassFactory ed eseguire l'override CreateInstancedi .

ATL fornisce altre tre macro che dichiarano una class factory:

Requisiti

Intestazione: atlcom.h

CComClassFactory::CreateInstance

Crea un oggetto del CLSID specificato e recupera un puntatore di interfaccia a questo oggetto.

STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);

Parametri

pUnkOuter
[in] Se l'oggetto viene creato come parte di un'aggregazione, pUnkOuter deve essere l'elemento sconosciuto esterno. In caso contrario, pUnkOuter deve essere NULL.

riid
[in] IID dell'interfaccia richiesta. Se pUnkOuter è diverso da NULL, riid deve essere IID_IUnknown.

ppvObj
[out] Puntatore al puntatore all'interfaccia identificato da riid. Se l'oggetto non supporta questa interfaccia, ppvObj è impostato su NULL.

Valore restituito

Valore HRESULT standard.

CComClassFactory::LockServer

Incrementa e decrementa il conteggio dei blocchi del modulo chiamando _Module::Lock rispettivamente e _Module::Unlock.

STDMETHOD(LockServer)(BOOL fLock);

Parametri

Gregge
[in] Se TRUE, il conteggio dei blocchi viene incrementato; in caso contrario, il conteggio dei blocchi viene decrementato.

Valore restituito

Valore HRESULT standard.

Osservazioni:

_Module fa riferimento all'istanza globale di CComModule o a una classe derivata da essa.

La chiamata LockServer consente a un client di mantenere una class factory in modo che più oggetti possano essere creati rapidamente.

Vedi anche

Classe CComObjectRootEx
CComGlobalsThreadModel
Cenni preliminari sulla classe