Подскажите, пожалуйста, как правильно сделать
интерфейсы
IBase : IDispatch
[ id(1) ]HRESULT AddObject([in] IBase *pObject);
IDerived1 : IBase
IDerived2 : IBase
IDerived3 : IBase
...
много таких
Сделал с помощью ClassWizard CBase,
переделал в шаблон
Файл Base.h
template <class CT, class T, const IID* piid = &__uuidof(T), const GUID* plibid = &CAtlModule::m_libid, WORD wMajor = 1,
WORD wMinor = 0, class tihclass = CComTypeInfoHolder>
class CBase :
public IDispatchImpl <T, piid, plibid, wMajor, wMinor, tihclass >
Файл Derived1.h
class ATL_NO_VTABLE CDerived1:
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CDerived1, &CLSID_NULL>,
public IConnectionPointContainerImpl< CDerived1 >,
public CProxy_IBaseEvents< CDerived1 >,
public CBase<CDerived1, IDerived1, &IID_IDerived1, &LIBID_TestLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CDerived1()
{
}
BEGIN_COM_MAP(CDerived1)
COM_INTERFACE_ENTRY(IDerived1)
COM_INTERFACE_ENTRY(IBase)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
END_COM_MAP()
Далее извещение о событии:
Файл Base.h
STDMETHODIMP AddObject(IBase * pObject)
{
(static_cast< CT *>(this))->Fire_OnAddObject(pObject);
return S_OK;
}
Это нормально ?
Или можно как-то проще и красивее сделать ?