Поделиться через


Changing the Default Class Factory and Aggregation Model

CComCoClass использования библиотеки ATL по умолчанию указать фабрику класса и агрегирование для объекта модели. CComCoClass определяет следующие 2 макроса:

Можно переопределить одно из этих значений по умолчанию, указав другой макрос в определении класса. Например, чтобы использовать CComClassFactory2 вместо CComClassFactory укажите макрос DECLARE_CLASSFACTORY2:

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

2 Остальных макросов, которые определяют фабрику класса DECLARE_CLASSFACTORY_AUTO_THREAD и DECLARE_CLASSFACTORY_SINGLETON.

Библиотеки ATL также использует механизм typedef чтобы реализовать расширение функциональности по умолчанию. Например, макрос DECLARE_AGGREGATABLE использует typedef, чтобы определить тип _CreatorClass, которое затем ссылаются на протяжении библиотеки ATL. Обратите внимание, что в производном классе typedef с помощью этих же именем в результаты typedef базового типа библиотеки ATL с помощью определения и переопределить функциональности по умолчанию.

См. также

Ссылки

Fundamentals of ATL COM Objects

Другие ресурсы

Aggregation and Class Factory Macros