Sdílet prostřednictvím


Změna výchozího objektu pro vytváření tříd a agregačního modelu

ATL používá CComCoClass k definování výchozího objektu pro vytváření tříd a agregační model objektu. CComCoClass určuje následující dvě makra:

  • DECLARE_CLASSFACTORY Deklaruje objekt pro vytváření tříd jako CComClassFactory.

  • DECLARE_AGGREGATABLE Deklaruje, že objekt lze agregovat.

Kteroukoli z těchto výchozích hodnot můžete přepsat zadáním jiného makra v definici třídy. Chcete-li například použít CComClassFactory2 místo CComClassFactory, zadejte 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

Dvě další makra definující objekt pro vytváření tříd jsou DECLARE_CLASSFACTORY_AUTO_THREAD a DECLARE_CLASSFACTORY_SINGLETON.

ATL také používá mechanismus k implementaci výchozího typedef chování. Například makro DECLARE_AGGREGATABLE používá typedef k definování typu volaný _CreatorClass, který se pak odkazuje v rámci knihovny ATL. Všimněte si, že v odvozené třídě se typedef použije stejný název jako výsledek základní třídy typedef v ATL pomocí vaší definice a přepsání výchozího chování.

Viz také

Základy ATL – objekty COM
Agregační makra a makra objektu pro vytváření tříd