Changing the Default Class Factory and Aggregation Model
CComCoClass использования библиотеки ATL по умолчанию указать фабрику класса и агрегирование для объекта модели. CComCoClass определяет следующие 2 макроса:
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
2 Остальных макросов, которые определяют фабрику класса DECLARE_CLASSFACTORY_AUTO_THREAD и DECLARE_CLASSFACTORY_SINGLETON.
Библиотеки ATL также использует механизм typedef чтобы реализовать расширение функциональности по умолчанию. Например, макрос DECLARE_AGGREGATABLE использует typedef, чтобы определить тип _CreatorClass, которое затем ссылаются на протяжении библиотеки ATL. Обратите внимание, что в производном классе typedef с помощью этих же именем в результаты typedef базового типа библиотеки ATL с помощью определения и переопределить функциональности по умолчанию.
См. также
Ссылки
Fundamentals of ATL COM Objects