Ändern der Standardklassenfactory und Aggregationmodell
ATL verwendet CComCoClass , um das Standardklassenfactory- und Aggregationsmodell für Ihr Objekt zu definieren. CComCoClass
Gibt die folgenden beiden Makros an:
DECLARE_CLASSFACTORY Deklariert die Klassenfactory als CComClassFactory.
DECLARE_AGGREGATABLE Deklariert, dass Ihr Objekt aggregiert werden kann.
Sie können eine dieser Standardwerte außer Kraft setzen, indem Sie ein anderes Makro in der Klassendefinition angeben. Wenn Sie z. B. "CComClassFactory2" anstelle von "CComClassFactory2" verwenden möchten, geben Sie das DECLARE_CLASSFACTORY2 Makro an:CComClassFactory
class ATL_NO_VTABLE CMyClass2 :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyClass2, &CLSID_MyClass>,
public IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispatchImpl<IMyDualInterface, &__uuidof(IMyDualInterface), &LIBID_NVC_ATL_COMLib, /* wMajor = */ 1, /* wMinor = */ 0>
{
public:
DECLARE_CLASSFACTORY2(CMyLicense)
// Remainder of class declaration omitted
Zwei weitere Makros, die eine Klassenfactory definieren, sind DECLARE_CLASSFACTORY_AUTO_THREAD und DECLARE_CLASSFACTORY_SINGLETON.
ATL verwendet auch den Mechanismus zum Implementieren des typedef
Standardverhaltens. Beispielsweise verwendet typedef
das DECLARE_AGGREGATABLE-Makro zum Definieren eines Typs namens _CreatorClass
,, auf den dann in ATL verwiesen wird. Beachten Sie, typedef
dass eine abgeleitete Klasse denselben Namen wie die Ergebnisse der Basisklasse typedef
in ATL unter Verwendung Ihrer Definition verwendet und das Standardverhalten außer Kraft setzt.
Siehe auch
Grundlagen von ARL COM-Objekten
Aggregation und Klassenfactory-Makros