我有一个活的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;
}
背景:我一直在尝试了几天,现在在非MFC/ATL C++ Win32应用程序接收COM事件。事实证明,这是我必须完成的最艰难的任务,时间明智。