更改默认类工厂和聚合模型

ATL 使用 CComCoClass 为对象定义默认类工厂和聚合模型。 CComCoClass 指定以下两个宏:

可以通过在类定义中指定另一个宏来替代这些默认值中的任何一个。 例如,若要使用 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_THREADDECLARE_CLASSFACTORY_SINGLETON

ATL 还使用 typedef 机制来实现默认行为。 例如,DECLARE_AGGREGATABLE 宏使用 typedef 定义调用 _CreatorClass 的类型,然后在整个 ATL 中引用该类型。 请注意,在派生类中,使用与基类的 typedef 同名的 typedef 会导致 ATL 使用定义并且重写默认行为。

另请参阅

ATL COM 对象基础知识
聚合和类工厂宏