ATL を使用 CComCoClass は、オブジェクトの既定のクラス ファクトリと集約を定義するシミュレートします。CComCoClass は、2 種類のマクロを指定します:
DECLARE_CLASSFACTORY は CComClassFactoryにクラス ファクトリを宣言します。
DECLARE_AGGREGATABLE は、オブジェクトが集約できることを宣言します。
は、をクラス定義で別のマクロを指定することによってこれらの既定値をオーバーライドできます。たとえば、CComClassFactoryの代わりに CComClassFactory2 を使用するには、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 のマクロは _CreatorClassと呼ばれる ATL で参照される型を定義するために typedef を使用します。派生クラスで、同じを使用して typedef が、シグネチャと、既定の動作をオーバーライドできます。を使用して ATL で基本クラスの typedef の結果として示すことに注意してください。