Compartilhar via


Alterando a fábrica de classes padrão e o modelo de agregação

A ATL usa CComCoClass para definir a fábrica de classes padrão e o modelo de agregação do objeto. CComCoClass especifica estas duas macros:

Você pode substituir qualquer um desses padrões especificando outra macro em sua definição de classe. Por exemplo, para usar CComClassFactory2 em vez de CComClassFactory, especifique a macro 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

Duas outras macros que definem uma fábrica de classes são DECLARE_CLASSFACTORY_AUTO_THREAD e DECLARE_CLASSFACTORY_SINGLETON.

A ATL também usa o mecanismo typedef para implementar o comportamento padrão. Por exemplo, a macro DECLARE_AGGREGATABLE usa typedef para definir um tipo chamado _CreatorClass, que é referenciado em toda a ATL. Observe que, em uma classe derivada, um typedef usando o mesmo nome que typedef da classe base faz com que a ATL use sua definição e substitua o comportamento padrão.

Confira também

Princípios básicos de objetos COM da ATL
Macros de fábrica de classes e agregação