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:
DECLARE_CLASSFACTORY Declara a fábrica de classes como CComClassFactory.
DECLARE_AGGREGATABLE Declara que seu objeto pode ser agregado.
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