更改默认选件类工厂和摘要模型
ATL使用 CComCoClass 定义默认选件类工厂和摘要设计您的对象的。CComCoClass 指定下面两个宏:
DECLARE_CLASSFACTORY 声明选件类工厂是 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
定义选件类工厂的其他两宏是 DECLARE_CLASSFACTORY_AUTO_THREAD 和 DECLARE_CLASSFACTORY_SINGLETON。
ATL还使用 typedef framework实现默认行为。例如,DECLARE_AGGREGATABLE 宏使用 typedef 定义调用 _CreatorClass的类型,然后引用在ATL中。请注意在派生类中,使用名称的 typedef 和在ATL的基类的 typedef 结果相同使用您的定义和重写默认行为。