Advise 回来 E_UNEXPECTED,错在哪里
Advise 返回 E_UNEXPECTED,错在哪里?
我对COM基本不懂,刚学,在网上东拼西凑弄了点代码,出问题,想请教一下错在哪里?
.h头文件
.cpp文件
目的是想响应IWebBrowser2产生的事件,但是试图Advise的时候,返回错误码 E_UNEXPECTED ;还望指教一下,如果有完整的例子更加好了。谢谢!
------解决思路----------------------
http://www.cnblogs.com/devcjq/articles/2309439.html
我对COM基本不懂,刚学,在网上东拼西凑弄了点代码,出问题,想请教一下错在哪里?
.h头文件
class WebBrowser2EventListener : public IDispatch //DWebBrowserEvents2
{
private:
void __stdcall DocumentComplete(IDispatch *pDisp, VARIANT *URL);
public: // IDispatch methods
STDMETHOD(QueryInterface)( REFIID riid, void **ppvObject)
{
HRESULT hr = E_NOINTERFACE;
if (riid == __uuidof(IDispatch))
{
*ppvObject = (IDispatch*)this;
AddRef();
hr = S_OK;
}
else if (riid == __uuidof(DWebBrowserEvents2))
{
*ppvObject = (IDispatch*)this; // DWebBrowserEvents2*
AddRef();
hr = S_OK;
}
return hr;
}
STDMETHODIMP_(ULONG) AddRef(void)
{
return 1;
}
STDMETHODIMP_(ULONG) Release(void)
{
return 1;
}
STDMETHOD(GetTypeInfoCount)(UINT*)
{
return E_NOTIMPL;
}
STDMETHOD(GetTypeInfo)(UINT, LCID, ITypeInfo**)
{
return E_NOTIMPL;
}
STDMETHOD(GetIDsOfNames)(REFIID, LPOLESTR *rgszNames, UINT, LCID, DISPID *rgDispId)
{
return E_NOTIMPL;
}
STDMETHOD(Invoke)(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS FAR* pDispParams,VARIANT FAR* pVarResult,EXCEPINFO FAR* pExcepInfo,unsigned int FAR* puArgErr)
{
if (dispIdMember == DISPID_DOCUMENTCOMPLETE)
{
__asm{int 3};
}
return S_OK;
}
};
.cpp文件
void TestAA()
{
if(SUCCEEDED(OleInitialize(NULL)))
{
IWebBrowser2 *pBrowser2 = NULL;
CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&pBrowser2);
if(pBrowser2)
{
IConnectionPointContainer* pCPC = NULL;
IConnectionPoint* pCP = NULL;
DWORD dwCookie = 0;
pBrowser2->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
pCPC->FindConnectionPoint(DIID_DWebBrowserEvents2, &pCP);
WebBrowser2EventListener* pEventListener = new WebBrowser2EventListener;
HRESULT hr = pCP->Advise( (IUnknown*)(void*)pEventListener, &dwCookie);
if(FAILED(hr))
{
//在这里, Advise 返回 E_UNEXPECTED
MessageBox(NULL, "Failed to Advise", "Error", MB_ICONERROR);
}
//....省略
//...........省略
//...................省略
pBrowser2->Release();
}
OleUninitialize();
}
return;
}
目的是想响应IWebBrowser2产生的事件,但是试图Advise的时候,返回错误码 E_UNEXPECTED ;还望指教一下,如果有完整的例子更加好了。谢谢!
------解决思路----------------------
http://www.cnblogs.com/devcjq/articles/2309439.html