2013-12-09 2 views
1

Я работаю над IE BHO, в событии BeforeNavigate2, как я могу получить указатель на IWebBrowser2? вот мой код:(IE BHO) Получить IWebBrowser2 из события BeforeNavigate2

STDMETHODIMP CEventSink::Invoke(DISPID dispIdMember, .....) { 
    IWebBrowser2* pSite = 0; 
    HRESULT hr; 

if(dispIdMember == DISPID_BEFORENAVIGATE2) { 

    hr = ((IDispatch*)pDispParams->rgvarg[0].pdispVal)->QueryInterface(IID_IWebBrowser2, (void**)&pSite);// This line Crashes 

и тип PARAM [0] не VT_DISPATCH:

if(pDispParams->rgvarg[0].vt == VT_DISPATCH) { 
    msgbox("yes VT_DISPATCH"); 
} else { 
    msgbox("no.."); // it goes here 
} 

MSDN (BeforeNavigate2) говорит первый параметр

Указатель на интерфейс IDispatch для объекта WebBrowser, который представляет окно или фрейм. Этот интерфейс может быть запрошен для интерфейса IWebBrowser2.

Что случилось с моим кодом?

Заранее спасибо.

ответ

1

В реализации Invoke аргументы в обратном порядке.

Использование rgvarg[6] для «первых» аргументы, и использовать rgvarg[0] для последней (седьмой)

 Смежные вопросы

  • Нет связанных вопросов^_^