Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Diese Klasse implementiert die IClassFactory-Schnittstelle .
Syntax
class CComClassFactory
: public IClassFactory,
public CComObjectRootEx<CComGlobalsThreadModel>
Member
Öffentliche Methoden
| Name | Beschreibung |
|---|---|
| CComClassFactory::CreateInstance | Erstellt ein Objekt der angegebenen CLSID. |
| CComClassFactory::LockServer | Sperrt die Klassenfactory im Arbeitsspeicher. |
Hinweise
CComClassFactory implementiert die IClassFactory-Schnittstelle , die Methoden zum Erstellen eines Objekts einer bestimmten CLSID enthält, sowie das Sperren der Klassenfactory im Arbeitsspeicher, damit neue Objekte schneller erstellt werden können. IClassFactory muss für jede Klasse implementiert werden, die Sie in der Systemregistrierung registrieren und der Sie eine CLSID zuweisen.
ATL-Objekte erwerben normalerweise eine Klassenfactory, indem sie von CComCoClass abgeleitet wird. Diese Klasse enthält das Makro DECLARE_CLASSFACTORY, das als Standardklassenfactory deklariert wird CComClassFactory . Um diese Standardeinstellung außer Kraft zu setzen, geben Sie eines der DECLARE_CLASSFACTORYXXX-Makros in Der Klassendefinition an. Beispielsweise verwendet das DECLARE_CLASSFACTORY_EX-Makro die angegebene Klasse für die Klassenfactory:
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.
Die obige Klassendefinition gibt an, dass CMyClassFactory als Standardklassenfactory des Objekts verwendet wird. CMyClassFactory muss von CComClassFactory und außer Kraft setzen CreateInstance.
ATL stellt drei weitere Makros bereit, die eine Klassenfactory deklarieren:
DECLARE_CLASSFACTORY2 verwendet CComClassFactory2, wodurch die Erstellung über eine Lizenz gesteuert wird.
DECLARE_CLASSFACTORY_AUTO_THREAD verwendet CComClassFactoryAutoThread, das Objekte in mehreren Wohnungen erstellt.
DECLARE_CLASSFACTORY_SINGLETON verwendet CComClassFactorySingleton, das ein einzelnes CComObjectGlobal -Objekt erstellt.
Anforderungen
Kopfzeile: atlcom.h
CComClassFactory::CreateInstance
Erstellt ein Objekt der angegebenen CLSID und ruft einen Schnittstellenzeiger auf dieses Objekt ab.
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
Parameter
pUnkOuter
[in] Wenn das Objekt als Teil eines Aggregats erstellt wird, muss "pUnkOuter " das äußere Unbekannte sein. Andernfalls muss "pUnkOuter" NULL sein.
riid
[in] Die IID der angeforderten -Schnittstelle. Wenn pUnkOuter ungleich NULL ist, muss riid sein IID_IUnknown.
ppvObj
[out] Ein Zeiger auf den Schnittstellenzeiger, der von riid identifiziert wird. Wenn das Objekt diese Schnittstelle nicht unterstützt, wird ppvObj auf NULL festgelegt.
Rückgabewert
Ein HRESULT-Standardwert.
CComClassFactory::LockServer
Erhöht und erhöht die Anzahl der Modulsperren durch Aufrufen _Module::Lock bzw _Module::Unlock.
STDMETHOD(LockServer)(BOOL fLock);
Parameter
Herde
[in] Wenn WAHR, wird die Sperranzahl erhöht; andernfalls wird die Sperranzahl erhöht.
Rückgabewert
Ein HRESULT-Standardwert.
Hinweise
_Module bezieht sich auf die globale Instanz von CComModule oder eine von ihr abgeleitete Klasse.
Durch Das Aufrufen LockServer kann ein Client eine Klassenfactory speichern, sodass mehrere Objekte schnell erstellt werden können.
Siehe auch
CComObjectRootEx-Klasse
CComGlobalsThreadModel
Klassenübersicht