Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > IDispatchEx


Автор: pR13S7 20.6.2006, 09:37
Нужно реализовать IDispatchEx интерфейс без использования ATL. C COM до этого не работал. Как я понял нужно заменить стандартный интерфейс COM, в MSDN про него пару слов только сказано, не ясна логика функционирования интерфейса. Может кто знает что к чему ии хотябы даст ссылку где почитать про это дело. 

Автор: Dart 29.6.2006, 10:31
Почитать-то в MSDN - там это достаточно хорошо написано, хоть и без литра не разберешься.
Суть такова
Создаешь на основе CCmdTarget свой класс и добавляешь в него свои интерфейсы, пишешь все ручками:
Код

class CDisp : public CCmdTarget
{
    BEGIN_INTERFACE_PART(DispatchEx, IDispatchEx)
        STDMETHOD(Method1)(/*здесь возможны параметры, которые будут передаваться в интерфейс*/);
        STDMETHOD(Method2)();
    END_INTERFACE_PART(DispatchEx)
    BEGIN_INTERFACE_PART(DispatchEx1, IDispatchEx)
        STDMETHOD(Method1)();
    END_INTERFACE_PART(DispatchEx1)

    DECLARE_INTERFACE_MAP()
}

В реализации:
Код

BEGIN_INTERFACE_MAP(CDisp, CCmdTarget)
    INTERFACE_PART(CDisp, IID_IDispatchEx, DispatchEx)
    INTERFACE_PART(CDisp, IID_IDispatchEx1, DispatchEx1)
END_INTERFACE_MAP()

STDMETHODIMP CDisp::DispatchEx::Method1(/*те самые параметры*/)
{
    return S_OK;
}

IID естественно свой надо определить
А использование
Код

    CComPtr<IDispatchEx> spDispEx;
    HRESULT hr = pUnk->QueryInterface(&spDispEx);
    hr = spDispEx->Method1();

Ну и по образу и подобию 

Автор: Alladin 2.7.2006, 15:08
https://secure.codeproject.com/com/dyn_idispatch.asp?df=100&forumid=2574&exp=0&select=53583

https://secure.codeproject.com/com/com_in_c1.asp
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)