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


Автор: RastaDja 8.7.2011, 13:44
   Доброго времени суток!
   Проблема: есть COM объект, idl которого выглядит так (данные из OLE viewer):
Код

//...
    [
      uuid(2220345E-009F-4B87-A333-A8234D61785A),
      version(1.0)
    ]
    coclass Device{
        [default] interface _Device;
        [default, source] dispinterface __Device;
    };
//...
    [
      uuid(A45156FB-011B-4FF5-9AE4-C345AC45CC24),
      version(1.0),
      hidden,
      nonextensible
    ]
    dispinterface __Device {
        properties:
        methods:
            [id(0x00000001)]
            void ReadCompleated();
    };
//...

   Теперь в своем проекте (это ATL COM dll), я создал экземпляр класса Device.
   Подскажите: как обработать события ReadCompleated класса Device?
   Спасибо.

Автор: RastaDja 8.7.2011, 15:56
   сделал такие действия:
   1. прикрутил IDispEventImpl
Код

class ATL_NO_VTABLE CDeviceObj :
    public IDispEventImpl<0, CDeviceObj , &__uuidof(__Device), &LIBID_DeviceObjLib, 1, 0>,
        //...
{
       //...
       BEGIN_SINK_MAP(CDeviceObj)
              SINK_ENTRY_EX(0, __uuidof(__Device), 0x00000001, _ReadCompleated)
       END_SINK_MAP()
       
       void __stdcall _ReadCompleated(){
        int f = 0;
       }
       //...
}

    2. вот так вот привязался к событию (эта привязка в одном из методов)
Код

       HRESULT hr = _IDispEventLocator<0, &__uuidof(__Device)>::DispEventAdvise( pCurDevice, &__uuidof(__Device) );

    3. ставлю прерывание в _ReadCompleated ф-ию, - нет ничего.

    Если кто ошибки заметил, или я не так делаю как надо? - подскажите.

Автор: RastaDja 11.7.2011, 11:21
Все. Разобрался. http://msdn.microsoft.com/en-us/library/b91kf2t0(v=VS.80).aspx

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