v
- VARIANT типа VT_DISPATCH, который указывает интерфейс IDispatch объекта с методом по умолчанию, который вызывается при возникновении события.
Обработчики событий в этом контексте - это COM-экземпляры, которые реализуют IDispatch
- поэтому вам нужно передать указатель на IDispatch
, который реализует ваш объект обработчика событий:
CComQIPtr<IDispatch> spDisp(spMyHandler); // something like that
someElement->put_onmousedown(CComVariant(spDisp));
Примечание: put_
вместо get_
- вы хотите зарегистрировать обработчик .
На этом IDispatch::Invoke()
вызывается с:
wFlags
содержит DISPATCH_METHOD
( "метод вызывается" )
dispIdMember
= 0
/ DISPID_VALUE
( "метод по умолчанию" )
Вместе это должно выглядеть примерно так:
HRESULT MyHandler::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*)
{
// ...
if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE))
{
// ...
}
}