BYTE* tmp = new BYTE[len]疏失,求指点
BYTE* tmp = new BYTE[len]出错,求指点!
本帖最后由 VisualEleven 于 2012-12-05 14:04:53 编辑
本帖最后由 VisualEleven 于 2012-12-05 14:04:53 编辑
DWORD m_dwFileSize; //要下载的图片大小
HGLOBAL m_hGlobal; //图片保存内存地址
BOOL GetImage(CString imgUrl); //将指定网址的图片保存到m_hGlobal所指内存,同时返回图片大小
BOOL CReadUrlImgDlg::GetImage(CString imgUrl)
{
BOOL bFlag = TRUE;
try
{
HINTERNET hInternet = NULL;
hInternet = InternetOpen(_T("session"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if (!hInternet)
{
bFlag = FALSE;
return bFlag;
}
HINTERNET hUrl;
CHAR szHead[] = _T("Accept: */*\r\nAccept-Language: zh-cn\r\n"
"Accept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/4.0 "
"(compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.1.4322)");
hUrl = InternetOpenUrl(hInternet, imgUrl, szHead, lstrlenA(szHead),
INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | \
INTERNET_FLAG_RELOAD,0);
if (!hUrl)
{
bFlag = FALSE;
//InternetCloseHandle(hInternet);
return bFlag;
}
DWORD length = 1024 * 10;
DWORD readLength = 0;
BYTE* pBuffer = NULL;
BYTE* p = NULL;
//下载图片
pBuffer = new BYTE[length];
memset(pBuffer, 0, length);
p = pBuffer;
BOOL read = FALSE;
do
{
read=InternetReadFile(hUrl, p, /*16384*/10240, &readLength);
if(!read)
{
bFlag = FALSE;
return bFlag;
}
if(readLength==0)
break;
if ((p-pBuffer+readLength)>=length) //如果图片大小超过10K
{
DWORD len = 2 * length;
BYTE* tmp = new BYTE[len]; //一运行到这里就出错,求解
memset(tmp,0,len);
memcpy(tmp, pBuffer, length);
int offset=p-pBuffer;
//delete[] pBuffer;
pBuffer=tmp;
delete[] tmp;
tmp = NULL;
p=pBuffer+offset;
length=len;
}