Добрый день. У меня есть следующее объявление в IDL-файле
[
uuid(157E83C8-70E4-4797-847C-5ADCA62A8797),
version(1.0),
helpstring("GCA 1.0 Type Library")
]
library GCALib
{
...
[
uuid(7B8A3B8E-687A-416E-9FEB-91D01031650E),
helpstring("_IDeviceProxyEvents Interface")
]
dispinterface _IDeviceProxyEvents {
properties:
methods:
[id(0x00000001)]
HRESULT ConnectionStateChanged(
[in] IDispatch* EventSource,
[in] ConnectResultEnum State);
[id(0x00000002)]
HRESULT DeviceEventReceived(
[in] IDispatch* EventSource,
[in] IEvent* Event);
};
}
Есть класс-обработчик, выглядящий так:
class Device
: public IDispEventImpl<1, Device, &DIID__IDeviceProxyEvents, &LIBID_GCALib, 1, 0>
...
{
...
BEGIN_SINK_MAP(Device)
SINK_ENTRY_EX(1, DIID__IDeviceProxyEvents, 1, OnConnectionStateChanged)
END_SINK_MAP()
...
HRESULT Init()
{
...
CComPtr<IDeviceConnector> pDevProxy;
if (SUCCEEDED(pDevProxy.CoCreateInstance(CLSID_DeviceProxy, NULL, CLSCTX_INPROC_SERVER)))
{
...
DispEventAdvise(pDevProxy, &DIID__IDeviceProxyEvents);
}
}
...
HRESULT _stdcall OnConnectionStateChanged(IDispatch *EventSource, ConnectResultEnum State)
{
}
}
И хотя подпись проходит успешно, события объекта не попадают в мой обработчик. Что сделано не так, подскажите плиз?