既定のクラス ファクトリと集約モデルの変更
更新 : 2007 年 11 月
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
クラス ファクトリを定義するマクロには、このほかにも DECLARE_CLASSFACTORY_AUTO_THREAD と DECLARE_CLASSFACTORY_SINGLETON の 2 つのマクロがあります。
ATL では、既定の動作を実装するために typedef 機構も使用します。たとえば、DECLARE_AGGREGATABLE マクロは、typedef を使用して、_CreatorClass という型を定義します。この型は、ATL 全体を通して参照されます。派生クラスの typedef に基本クラスの typedef と同じ名前を使用すると、ATL が派生クラスの定義を使用し、既定の動作がオーバーライドされます。