_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();