變更預設 Class Factory 和彙總模型
使用 ATL CComCoClass 定義預設 Class Factory 和您的物件模型中的彙總。CComCoClass 指定下列兩個巨集:
DECLARE_CLASSFACTORY 宣告 Class Factory 是 CComClassFactory。
DECLARE_AGGREGATABLE 宣告您的物件可彙總。
您可以指定另一個巨集覆寫這些預設值是在您的類別定義。例如,使用 CComClassFactory2 而不是 CComClassFactory,請指定 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
定義 Class Factory 的其他兩個巨集就 DECLARE_CLASSFACTORY_AUTO_THREAD 和 DECLARE_CLASSFACTORY_SINGLETON。
ATL 也使用 typedef 機制實作預設行為。例如, DECLARE_AGGREGATABLE 巨集使用 typedef 定義呼叫 _CreatorClass的型別,然後參考在 ATL 中。請注意在衍生類別中,請使用名稱 typedef 和 ATL 中的基底類別 (Base Class) 的 typedef 結果相同使用您的定義以及覆寫預設行為。