Dela via


Ändra standardklassfabriken och aggregeringsmodellen

ATL använder CComCoClass för att definiera standardklassfabriken och aggregeringsmodellen för ditt objekt. CComCoClass anger följande två makron:

Du kan åsidosätta något av dessa standardvärden genom att ange ett annat makro i klassdefinitionen. Om du till exempel vill använda CComClassFactory2 i stället för CComClassFactoryanger du DECLARE_CLASSFACTORY2 makro:

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

Två andra makron som definierar en klassfabrik är DECLARE_CLASSFACTORY_AUTO_THREAD och DECLARE_CLASSFACTORY_SINGLETON.

ATL använder också mekanismen typedef för att implementera standardbeteende. Det DECLARE_AGGREGATABLE makrot använder typedef till exempel för att definiera en typ med namnet _CreatorClass, som sedan refereras till i hela ATL. Observera att i en härledd klass resulterar en typedef med samma namn som basklassens typedef i att ATL använder din definition och åsidosätter standardbeteendet.

Se även

Grunderna i ATL COM-objekt
Aggregerings- och klassfabriksmakron