У меня есть живой IDevicePtr, (IDevice является компонентом COM).
Я вызываю метод ("get_DeviceEvents") для его интерфейса событий, поэтому теперь у меня есть живой объект "IDeviceEvents",Этот объект имеет следующий интерфейс:
IDeviceEvents : IDispatch
{
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall add_TalkPressed (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall remove_TalkPressed (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall add_ButtonPressed (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall remove_ButtonPressed (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall add_MuteStateChanged (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall remove_MuteStateChanged (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall add_AudioStateChanged (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall remove_AudioStateChanged (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall add_FlashPressed (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall remove_FlashPressed (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall add_SmartPressed (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall remove_SmartPressed (
/*[in]*/ IUnknown * value ) = 0;
virtual HRESULT __stdcall SetInputReport (
/*[in]*/ SAFEARRAY * reportBuffer ) = 0;
};
Скажем, я хотел перехватить событие MuteStateChanged в моем приложении.Как я могу это сделать?Я могу назвать «add_MuteStateChanged».Я предполагаю, что это какой-то метод добавления обработчика событий.Какую полезную нагрузку я должен использовать?У меня есть локальный производный объект IDispatch, готовый для перехвата любого события с:
STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult,
EXCEPINFO* pexcepinfo, UINT* puArgErr)
{
// ALL I want is to get here when some event in IDeviceEvents is fired.
return S_OK;
}
Справочная информация: Я уже несколько дней пытаюсь получить событие COM в приложении M32 / ATL C ++ Win32.Это оказалось самой трудной задачей, которую я когда-либо выполнял, мудрое время.