Ä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