Advise 回来 E_UNEXPECTED,错在哪里

Advise 返回 E_UNEXPECTED,错在哪里?

我对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