Изменение фабрики классов и модели агрегации по умолчанию

Замечание

Библиотека активных шаблонов (ATL) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

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

  • DECLARE_CLASSFACTORY Объявляет фабрику классов, которая будет являться CComClassFactory.

  • DECLARE_AGGREGATABLE объявляет, что объект можно агрегировать.

Вы можете переопределить любой из этих значений по умолчанию, указав другой макрос в определении класса. Например, чтобы использовать 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

Два других макроса, которые определяют фабрику классов, это DECLARE_CLASSFACTORY_AUTO_THREAD и DECLARE_CLASSFACTORY_SINGLETON.

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

См. также

Основы COM-объектов ATL
Макросы агрегирования и фабрики классов