我在瀏覽器幫助對象上工作,而我試圖訪問觸發事件的IWebBrowser2。有了NavigateComplete2和其他事件,我可以輕易做到這一點,因爲我得到了Invoke參數的指針。從事件獲取IWebBrowser2指針DISPID_TITLECHANGE
但是我讀的是msdn上的this,它表示TitleChange事件的唯一參數是標題,所以如何從事件TitleChange獲取指向webbrowser接口的指針?
這裏是我如何與其他事件得到它:
HRESULT STDMETHODCALLTYPE CSiteEvents::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
DISPPARAMS __RPC_FAR *Params, VARIANT __RPC_FAR *pVarResult,
EXCEPINFO __RPC_FAR *pExcepInfo, UINT __RPC_FAR *puArgErr)
{
switch (dispIdMember)
{
case DISPID_DOCUMENTCOMPLETE:
{
IWebBrowser2 *pBrowser = GetBrowser(Params->rgvarg[1]);
// stuff
pBrowser->Release();
}
break;
}
}
IWebBrowser2* GetBrowser(const VARIANT &_Argument)
{
IWebBrowser2 *pBrowser = NULL;
if (_Argument.vt == VT_DISPATCH)
{
HRESULT hr;
IDispatch *pDisp = _Argument.pdispVal;
if (pDisp)
{
hr = pDisp->QueryInterface(IID_IWebBrowser2, reinterpret_cast<void **>(&pBrowser));
if (FAILED(hr))
pBrowser = NULL;
}
}
return pBrowser;
}
我使用Visual Studio 2010中
你的意思是我應該能夠使用:IWebBrowser2的* pBrowser = NULL; \t \t \t this-> QueryInterface(IID_IWebBrowser2,reinterpret_cast(&pBrowser));? 我試過了,pBrowser是NULL。 –
gtilx
2010-11-07 16:32:30
這就是我認爲應該工作 - 抱歉,沒有這樣做......當你嘗試使用'IDispatch'的UUID時會發生什麼? – 2010-11-07 18:50:39
如何使用UUID?你有一些例子嗎? – gtilx 2010-11-08 05:16:36