HRESULT CRssReader::ReadSync(LPCWSTR pwszUrl) { HRESULT hr = S_OK; IBindCtx* spBindCtx = NULL; IMoniker* spMoniker = NULL; IStream* spStream = NULL; _bAsync = false; CHKHR(URLOpenBlockingStream(NULL, pwszUrl, &spStream, NULL, NULL)); CHKHR(::CreateXmlReader(IID_IXmlReader, (void**) &_spXmlReader, NULL)); CHKHR(_spXmlReader->SetInput(spStream)); CHKHR(Parse()); CleanUp: SAFE_RELEASE(spBindCtx); SAFE_RELEASE(spMoniker); SAFE_RELEASE(spStream); SAFE_RELEASE(_spXmlReader); return hr; }
CString CHttpRequest::Download1 (CString strURL, int nMethod, CString strHeaders, CString strData, CString strFilename, bool* pbCancelDownload, DWORD dwDownloadId, int& nError, int nApproxContentLength, HWND hwndProgress, HWND hwndStatus, CString strMsg) { gl_stkDownloads.push_back (dwDownloadId); CBindStatusCallback callback (nMethod == 1 ? BINDVERB_GET : BINDVERB_POST, strHeaders, strData, dwDownloadId, &gl_stkDownloads, GetCurrentTime (), hwndProgress, hwndStatus); // show the UI controls if (hwndStatus != NULL) ::PostMessage (hwndStatus, SB_SETTEXT, 1, (LPARAM) strStatusMsg.GetBuffer (0)); CString strRetData; if (!strFilename.IsEmpty ()) { // download to file HRESULT hr = URLDownloadToFile (NULL, strURL, strFilename, 0, &callback); } else { IStream* pStream; char szBuffer[0x100]; DWORD dwGot; HRESULT hr = NOERROR; // Open a blocking type stream to the Web site. hr = URLOpenBlockingStream (NULL, strURL, &pStream, 0, &callback); if (hr != S_OK) { CString strMsg; strMsg.Format (IDS_ERROR_ACCESSING_URL, strURL.GetBuffer (-1)); AfxMessageBox (strMsg, MB_ICONERROR); } else { do { hr = pStream->Read (szBuffer, sizeof (szBuffer) - 1, &dwGot); szBuffer[dwGot] = 0; strRetData += szBuffer; } while (SUCCEEDED (hr) && hr != S_FALSE); pStream->Release(); } } // hide UI controls if (dwDownloadId == gl_stkDownloads.back ()) { if (hwndProgress != NULL) ::ShowWindow (hwndProgress, SW_HIDE); if (hwndStatus != NULL) for (int i = 1; i <= 4; i++) ::PostMessage (hwndStatus, SB_SETTEXT, i, (LPARAM) ""); } gl_stkDownloads.remove (dwDownloadId); return strRetData; }