_StreamPtr操作

10236 ワード

1 //     afxinet.h
 2  #include 
 3 CInternetSession::OpenURL     :
 4 CStdioFile* OpenURL( LPCTSTR pstrURL, //  URL  
 5   DWORD dwContext = 1, //   ID
 6   DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII, //  
 7   LPCTSTR pstrHeaders = NULL, //          
 8   DWORD dwHeadersLength = 0 );//            
 9 dwFlags   :
10 INTERNET_FLAG_RELOAD        
11 INTERNET_FLAG_DONT_CACHE        
12 INTERNET_FLAG_TRANSFER_ASCII        
13 INTERNET_FLAG_TRANSFER_BINARY        
14 //           
15 CString getURLContext(LPCTSTR pstrURL)
16 {
17  //   http   
18  char* headers="Accept:**"
                    "Accept-Encoding: gzip, deflate\r
" "Accept-Language: zh-CN\r
" "Content-Type: application/x-www-form-urlencoded\r
" "Cache-Control: no-cache\r
"; // , CHttpFile CInternetSession session("HttpClient"); DWORD dwFlags = INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE; CFile* httpFile = (CFile*)session.OpenURL(lpstrImgUrl,1,dwFlags,headers,strlen(headers));//1,dwFlags if (httpFile!=INVALID_HANDLE_VALUE) { char achQueryBuf[32]; DWORD dwQueryBufLen = sizeof(achQueryBuf); CHttpFile * pHF = (CHttpFile*)httpFile; pHF->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, achQueryBuf, &dwQueryBufLen, NULL); dwFileSize = (DWORD)atol(achQueryBuf); if (dwFileSize==0xFFFFFFFF) return E_FAIL; } else { return E_FAIL; } // HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); LPVOID pvData = NULL; if (hGlobal == NULL) return E_FAIL; if ((pvData = GlobalLock(hGlobal)) == NULL)// return E_FAIL; // dwByteRead = httpFile->Read(pvData,dwFileSize); GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); // bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic); if(FAILED(bResult)) return E_FAIL; OLE_XSIZE_HIMETRIC hmWidth; // , OLE_YSIZE_HIMETRIC hmHeight; // , pPic->get_Width(&hmWidth); pPic->get_Height(&hmHeight); // hmWidth hmHeight pixels ,1 =25.4 int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540); int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540); // ( BitBlt) bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,0,hmHeight,hmWidth,-hmHeight,NULL); pPic->Release(); httpFile->Close();// if (SUCCEEDED(bResult)) { return S_OK; } else { return E_FAIL; } } // , lpstrImgUrl URL ,hWnd     HRESULT Utils::ShowPic(char *lpstrImgUrl,HWND hWnd)    {      HDC hDC_Temp=GetDC(hWnd);          IPicture *pPic;      IStream *pStm;          BOOL bResult;          DWORD dwFileSize,dwByteRead;          // , CHttpFile     CInternetSession session("HttpClient");    CFile* httpFile = (CFile*)session.OpenURL(lpstrImgUrl);        if (httpFile!=INVALID_HANDLE_VALUE)      {        dwFileSize= httpFile->GetLength();//               if (dwFileSize==0xFFFFFFFF)          return E_FAIL;      }      else      {        return E_FAIL;      }              //       HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);      LPVOID pvData = NULL;          if (hGlobal == NULL)        return E_FAIL;          if ((pvData = GlobalLock(hGlobal)) == NULL)//         return E_FAIL;          //       dwByteRead = httpFile->Read(pvData,dwFileSize);        GlobalUnlock(hGlobal);          CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);          //       bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);          if(FAILED(bResult))        return E_FAIL;          OLE_XSIZE_HIMETRIC hmWidth; // ,       OLE_YSIZE_HIMETRIC hmHeight; // ,       pPic->get_Width(&hmWidth);      pPic->get_Height(&hmHeight);          // hmWidth hmHeight pixels ,1 =25.4       int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);      int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);          // ( BitBlt)      bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,        0,hmHeight,hmWidth,-hmHeight,NULL);          pPic->Release();          httpFile->Close();//           if (SUCCEEDED(bResult))      {        return S_OK;      }      else      {        return E_FAIL;      }    }  // , lpstrImgUrl URL ,hWnd   HRESULT Utils::ShowPic(char *lpstrImgUrl,HWND hWnd)   {     HDC hDC_Temp=GetDC(hWnd);     IPicture *pPic;     IStream *pStm;     BOOL bResult;     DWORD dwFileSize,dwByteRead;      // , CHttpFile CInternetSession session("HttpClient"); CFile* httpFile = (CFile*)session.OpenURL(lpstrImgUrl);   if (httpFile!=INVALID_HANDLE_VALUE)     {       dwFileSize= httpFile->GetLength();//          if (dwFileSize==0xFFFFFFFF)         return E_FAIL;     }     else     {       return E_FAIL;     }     //      HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);     LPVOID pvData = NULL;     if (hGlobal == NULL)       return E_FAIL;     if ((pvData = GlobalLock(hGlobal)) == NULL)//        return E_FAIL;     //      dwByteRead = httpFile->Read(pvData,dwFileSize);   GlobalUnlock(hGlobal);     CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);     //      bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);     if(FAILED(bResult))       return E_FAIL;     OLE_XSIZE_HIMETRIC hmWidth; // ,     OLE_YSIZE_HIMETRIC hmHeight; // ,     pPic->get_Width(&hmWidth);     pPic->get_Height(&hmHeight);     // hmWidth hmHeight pixels ,1 =25.4     int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);    int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);    // ( BitBlt)     bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,       0,hmHeight,hmWidth,-hmHeight,NULL);     pPic->Release();     httpFile->Close();//      if (SUCCEEDED(bResult))     {       return S_OK;     }     else     {       return E_FAIL;     }   }  posted on 2013-04-05 17:49 (4704) (2) VC++6.0 HTTP OpenURL FeedBack: # re: VC++6.0 HTTP OpenURL 2013-04-07 20:05 C Stream Object Bmp,JPG VC Ado Field GetChuck AppendChunk Blob , , ado Stream Object, Blob , Blob , 。 。 Stream _ StreamPtr pStm; pStm.CreateInstance( "ADODB.Stream "); variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR); pStm-> PutType(adTypeBinary);// // // long lDataSize = m_pRecordset-> GetFields()-> GetItem( "photo ")-> ActualSize; //m_pRecordset , photo blob pStm-> Open( varOptional, adModeUnknown, adOpenStreamUnspecified, _bstr_t(), _bstr_t()); // pStm pStm-> Write(_variant_t(m_pRecordset-> GetFields()-> GetItem( "photo ")-> Value)); // photo pStm pStm-> SaveToFile( "c:\\publogo.jpg ", adSaveCreateOverWrite); pStm-> Close(); // , Com ,IPicture . HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, pStm-> GetSize()); LPVOID pvData = NULL; IStream *ps; if (hGlobal != NULL) { if ((pvData = GlobalLock(hGlobal)) != NULL) { char * m_pBMPBuffer = new char[pStm-> GetSize()+1];// char *pBuf = NULL; SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); memcpy(pvData,pBuf,pStm-> GetSize()); // m_pBMPBuffer SafeArrayUnaccessData (varBLOB.parray); GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal, TRUE, &ps); } } IPicture *pPic; if(SUCCEEDED(OleLoadPicture(ps,pStm-> GetSize() ,TRUE,IID_IPicture,(LPVOID*)&pPic))) { OLE_XSIZE_HIMETRIC hmWidth; OLE_YSIZE_HIMETRIC hmHeight; pPic-> get_Width(&hmWidth); pPic-> get_Height(&hmHeight); double fX,fY; CDC *pDC = GetClientDC();// fX=(double)pDC-> GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC-> GetDeviceCaps(HORZSIZE)*100.0); fY =(double)pDC-> GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC-> GetDeviceCaps(VERTSIZE)*100.0); if(FAILED(pPic-> Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) AfxMessageBox( " ! "); pPic-> Release(); } 。 , _StreamPtr pStm; pStm.CreateInstance( "ADODB.Stream "); variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR); // long lDataSize = m_pRecordset-> GetFields()-> GetItem( "photo ")-> ActualSize; pStm-> PutType(adTypeBinary; pStm-> Open( varOptional, adModeUnknown, adOpenStreamUnspecified, _bstr_t(), _bstr_t()); pStm-> LoadFromFile( "c:\\book.gif ");// variant_t varBLOB=pStm-> Read(adReadAll); m_pRecordset-> GetFields()-> GetItem( "photo ")-> Value= varBLOB;// 。 ADO Stream blob , , XMl , 。 Bitmap CComPtr spPic; if (varImage.vt != (VT_ARRAY|VT_UI1))return FALSE; SAFEARRAY *psa = varImage.parray; //get size long size=0; _com_util::CheckError(SafeArrayGetUBound(psa, 1, &size)); size += 1; //copy char *pBuf = NULL; _com_util::CheckError(SafeArrayAccessData(psa, (void **)&pBuf)); HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, size); void *pGlobal = GlobalLock(hGlobal); if (!pGlobal)return FALSE; memcpy(pGlobal, pBuf, size); SafeArrayUnaccessData(psa); GlobalUnlock(hGlobal); CComPtr spStream; _com_util::CheckError(CreateStreamOnHGlobal(hGlobal, true, &spStream)); _com_util::CheckError(OleLoadPicture(spStream, 0, TRUE, IID_IPicture, (void **)&spPic)); HBITMAP hBmp; spPic-> get_Handle((OLE_HANDLE *)&hBmp); CBitmap bmp; bmp.Attach(hBmp); BITMAP bm; bmp.GetBitmap(&bm); int x=bm.bmWidth; int y=bm.bmHeight; bmp.Detach();