既定のクラス ファクトリと集計モデルの変更
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 マクロは typedef
を使用して、_CreatorClass
という型を定義します。これはその後 ATL 全体で参照されます。 なお、派生クラスで typedef
の名前が基底クラスの typedef
と同じ場合、ATL は既定の動作をオーバーライドし、ご自分の定義を使用します。