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_CLASSFACTORY
macro 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 CreateInstance
di .
ATL fornisce altre tre macro che dichiarano una class factory:
DECLARE_CLASSFACTORY2 Usa CComClassFactory2, che controlla la creazione tramite una licenza.
DECLARE_CLASSFACTORY_AUTO_THREAD usa CComClassFactoryAutoThread, che crea oggetti in più appartamenti.
DECLARE_CLASSFACTORY_SINGLETON Usa CComClassFactorySingleton, che costruisce un singolo oggetto CComObjectGlobal.
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