2013-12-09 34 views
1

我正在使用IEHBA,在BeforeNavigate2事件中,如何獲取指向IWebBrowser2的指針?這裏是我的代碼:(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 

和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]作爲最後一個(第七個)