v
- 型VT_DISPATCH指定與當事件發生時調用的默認方法的對象的IDispatch接口的VARIANT。在這種情況下
事件處理程序是實現IDispatch
COM實例 - 所以你需要一個指針傳遞給IDispatch
,你的事件處理程序對象實現:
CComQIPtr<IDispatch> spDisp(spMyHandler); // something like that
someElement->put_onmousedown(CComVariant(spDisp));
注:put_
,而不是get_
- 你想註冊一個處理程序。
在此,IDispatch::Invoke()
被調用以:
wFlags
含有DISPATCH_METHOD
(「的方法是越來越被調用」)
dispIdMember
爲0
/DISPID_VALUE
(「默認方法」)
放在一起這應該beco我是這樣的:
HRESULT MyHandler::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*)
{
// ...
if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE))
{
// ...
}
}
它不會讓我 「MainClassName ::調用」 添加爲一個功能:「重寫虛函數從「ATL ::的IDispatchImpl不同 ::僅通過調用約定調用「 –
shaimagz
2010-03-09 01:52:52
使用'HRESULT STDMETHODCALLTYPE爲該聲明調用(/ * params * /)'或'STDMETHOD(調用)(/ * params * /)'。 – 2010-03-09 02:21:51
謝謝!最後一個問題:在invoke方法中,我如何使用當前的IDispatch? – shaimagz 2010-03-09 03:23:06