ATL中的多继承模板类,不是为了同类功能的扩展,而是为了某类功能的添加。
这些模板类具有某方面的通用功能,通过修改参数<CA5>来具体化实现类 - public CComCoClass<CA5, &CLSID_A5>。
这样CA5通过继承不同种类的具体化实现类,来扩展不通的功能。
这样就可以集中精力在开发类(CA5)的基本逻辑上,在完成了类(CA5)的实现后,通过继承不同模板类的生成具体的类,就可以快速实现COM的功能。
ATL是ActiveX template library的缩写,它是一套C++模板库。
ATL的核心就是由几十个不同功能的模板类构成的。通过多继承来不断组合这些功能类,来扩展程序功能。
// CA5
class ATL_NO_VTABLE CA5 :
public CComObjectRootEx<CComSingleThreadModel>, // 增加对不同线程方式的支持
public IDispatchImpl<IA5, &IID_IA5, &LIBID_ALib, /*wMajor =*/ 1, /*wMinor =*/ 0>, // 增加脚本支持
public IOleControlImpl<CA5>,
public IOleObjectImpl<CA5>,
public IOleInPlaceActiveObjectImpl<CA5>,
public IViewObjectExImpl<CA5>,
public IOleInPlaceObjectWindowlessImpl<CA5>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CA5>, // 增加连接容器功能
public CProxy_IA5Events<CA5>, // 增加连接点功能,负责Fire_
public IQuickActivateImpl<CA5>,
#ifndef _WIN32_WCE
public IDataObjectImpl<CA5>,
#endif
public IProvideClassInfo2Impl<&CLSID_A5, &__uuidof(_IA5Events), &LIBID_ALib>,
public CComCoClass<CA5, &CLSID_A5>, // 可创建
public CComControl<CA5>
{