變更預設 Class Factory 和彙總模型
ATL 會使用 CComCoClass 來定義對象的預設類別處理站和匯總模型。 CComCoClass
指定下列兩個巨集:
DECLARE_CLASSFACTORY宣告類別處理站為 CComClassFactory。
您可以在類別定義中指定另一個巨集,以覆寫這其中一個預設值。 例如,若要使用 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
另外兩個定義類別處理站的巨集會 DECLARE_CLASSFACTORY_AUTO_THREAD 和 DECLARE_CLASSFACTORY_SINGLETON。
ATL 也會使用機制 typedef
來實作預設行為。 例如,DECLARE_AGGREGATABLE巨集會使用 typedef
來定義稱為 _CreatorClass
的型別,然後在整個 ATL 中參考。 請注意,在衍生類別中, typedef
使用與基類相同名稱的 typedef
,會在ATL中使用您的定義並覆寫預設行為。