1
void CHtmlView::BeforeNavigate2(LPDISPATCH /* pDisp */, VARIANT* URL,
         VARIANT* Flags, VARIANT* TargetFrameName,
         VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)
 {
     ASSERT(V_VT(URL) == VT_BSTR);
     ASSERT(V_VT(TargetFrameName) == VT_BSTR);
     ASSERT(V_VT(PostData) == (VT_VARIANT | VT_BYREF));
     ASSERT(V_VT(Headers) == VT_BSTR);
     ASSERT(Cancel != NULL);
 
     USES_CONVERSION;
 
     VARIANT* vtPostedData = V_VARIANTREF(PostData);
     CByteArray array;
     if (V_VT(vtPostedData) & VT_ARRAY)
     {
         // must be a vector of bytes
         ASSERT(vtPostedData->parray->cDims == 1 &&
                vtPostedData->parray->cbElements == 1);
 
         vtPostedData->vt |= VT_UI1;
         COleSafeArray safe(vtPostedData);
 
         DWORD dwSize = safe.GetOneDimSize();
         LPVOID pVoid;
         safe.AccessData(&pVoid);
 
         array.SetSize(dwSize);
         LPBYTE lpByte = array.GetData();
 
         memcpy(lpByte, pVoid, dwSize);
         safe.UnaccessData();
     }
     // make real parameters out of the notification
 
     CString strTargetFrameName(V_BSTR(TargetFrameName));
     CString strURL = V_BSTR(URL);
     CString strHeaders = V_BSTR(Headers);
     DWORD nFlags = V_I4(Flags);
 
     // notify the user's class
     OnBeforeNavigate2(strURL, nFlags, strTargetFrameName,
         array, strHeaders, Cancel);
 }
 2
*Cancel=TRUE;