3,245
社区成员
发帖
与我相关
我的任务
分享
class ATL_NO_VTABLE CA :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CA, &CLSID_A>,
public IA
{...};
class ATL_NO_VTABLE CB :
...,
public CA,//???
public IB
{...}
template<class T> class IAImpl // 注意这里不需要从IA派生,也不能继承CComObject...等类
{
public:
// 这里实现IA的方法,注意不需要实现IUnknown
virtual HRESULT IAFunc1(...)
{ ... }
virtual HRESULT IAFunc2(...)
{ ... }
};
现在实现CB:
class CB : public CComObjectRootEx<...>, // 这两个基类只在最终组件类中才需要继承
public CComCoClass<...>,
public IAImpl<CB>, // 派生这个类,就不需要重复实现IA的方法了
public IB // 派生这个接口是必须的
{
public:
// 这里实现IB的所有方法
virtual HRESULT IBFunc1() {...}
};
如果需要实现一个独立的组件,只实现IA,那么应该这样写:
class CA : public CComObjectRootEx<...>, public CComCoClass<...>,
public IAImpl<CA>,
public IA
{
};