1 在ATL中是用多继承来实现组件类的,而在MFC中是用嵌套类来实现组件类
在MFC中对所有的嵌套类(从接口继承),的所有接口都给了实现,而ATL好象并不是这样
只是给了一个实现,如
class ATL_NO_VTABLE CAbc5 :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CAbc5, &CLSID_Abc5>,
public IDispatchImpl<IAbc5, &IID_IAbc5, &LIBID_ATLDLLLib>
为什么只有一个addref和realse,queryinterface的实现
IDispatchImpl是从IAbc5继承而来的难道他不需要实现addref和realse,queryinterface吗
2
我用向导插入简单对象时,(single和apartment)产生的效果是一样的即CComSingleThreadModel,
both和free产生的效果是一样的即CComMultiThreadModel
那么请教single和apartment的区别,both和free的区别
关于1,
ATL使用的是C++的模版,不是简单的继承概念。
addref和realse,queryinterface的实现是通过一般可以认为是通过CComObject实现的。
而每个父类的IxxxImp,都实现了自己的接口。
比较复杂,正在看ATL。我的意见是,如果在实际应用上没有必要,那就暂时忽略。
关于2,single和apartment的区别,both和free的区别
在注册表中有不同,你可以检查rgs文件。
第一个是基本C++问题,IDispatchImpl不是单独实例化,可以成抽象类,CAbc也是抽象类,它们可以带有纯虚函数。从IUnknown的几个原则知道,不管是在哪个接口里面,QueryInterface,AddRef,Release都应该是一致的,没有必要为它们单独实现,只需要在高层的子类来一次实现就好了。