Наследование от базового интерфейса public IDispatch
От: Аноним  
Дата: 25.07.14 08:24
Оценка:
Подскажите, пожалуйста, как правильно сделать


интерфейсы
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;
}


Это нормально ?
Или можно как-то проще и красивее сделать ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.