STDMETHODIMP CmyIe::Invoke(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr)
{
UNREFERENCED_PARAMETER(lcid);
UNREFERENCED_PARAMETER(wFlags);
UNREFERENCED_PARAMETER(pVarResult);
UNREFERENCED_PARAMETER(pExcepInfo);
UNREFERENCED_PARAMETER(puArgErr);
VARIANT v[5]; // Used to hold converted event parameters before passing them onto the event handling method
int n;
bool b;

if(!IsEqualIID(riid,IID_NULL)) return DISP_E_UNKNOWNINTERFACE; // riid should always be IID_NULL
// Initialize the variants
for(n=0;n<5;n++) VariantInit(&v[n]);
if(dispIdMember==DISPID_BEFORENAVIGATE2) { 
VariantChangeType(&v[0],&pDispParams->rgvarg[5],0,VT_BSTR);
VariantChangeType(&v[1],&pDispParams->rgvarg[4],0,VT_I4);
VariantChangeType(&v[2],&pDispParams->rgvarg[3],0,VT_BSTR);
VariantChangeType(&v[3],&pDispParams->rgvarg[2],0,VT_UI1|VT_ARRAY); 
VariantChangeType(&v[4],&pDispParams->rgvarg[1],0,VT_BSTR);  BeforeNavigate2(*pDispParams->rgvarg[0].ppdispVal,pDispParams->rgvarg[0].pvarVal,pDispParams->rgvarg[4].pvarVal,pDispParams->rgvarg[5].pvarVal,pDispParams->rgvarg[3].pvarVal,pDispParams->rgvarg[1].pvarVal,&pDispParams->rgvarg[6].boolVal);
if(v[3].vt!=VT_EMPTY) SafeArrayUnaccessData(v[3].parray);
if(b) *(pDispParams->rgvarg[0].pboolVal)=VARIANT_TRUE;
else *(pDispParams->rgvarg[0].pboolVal)=VARIANT_FALSE;
}
for(n=0;n<5;n++) VariantClear(&v[n]);
return S_OK;
}void CmyIe::BeforeNavigate2(IDispatch *pDisp,VARIANT *url,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers,VARIANT_BOOL *Cancel)
{
TCHAR msg[1024];
wsprintf(msg,_T("url=%ls\nFlags=0x%08X\nTargetFrameName=%ls\nPostData=%hs\nHeaders=%ls\nCancel=%s"),url,Flags,TargetFrameName,PostData,Headers,((Cancel)?(_T("true")):(_T("false"))));
MessageBox(NULL,msg,_T("CodeProject BHO Example - BeforeNavigate2 event fired!"),MB_OK|MB_ICONINFORMATION);
}请帮忙修改代码。谢谢