Я работаю над IE BHO, в событии BeforeNavigate2, как я могу получить указатель на IWebBrowser2? вот мой код:
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
и тип параметра [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.
Что не так с моим кодом?
Заранее спасибо.
В Invoke
реализации, аргументы в обратном порядке.
использование rgvarg[6]
для «первых» аргументов, и использовать rgvarg[0]
за последний (седьмой)
Других решений пока нет …