📄 subject_17862.htm
字号:
<p>
序号:17862 发表者:gdfgd 发表日期:2002-10-16 10:27:00
<br>主题:CHttpFile的Read的问题(__sbh_alloc_block)
<br>内容:我要读取一个视频文件的一段出来decode,建立连接都是正确的,<BR>但是read的时候老是出错,调试时发现是__sbh_alloc_block出错,<BR>不知道这个问题怎么解决?我传给Read的参数buff和size都是正确的!<BR>请指教!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:徐景周 回复日期:2002-10-16 11:05:24
<br>内容:可参看:<BR>BOOL CQueryASP::QueryASP(CStdioFile **pGetFile, CString strURLName)<BR>{<BR> // TODO: Add extra validation here<BR> //得到当前地址的字符串<BR> CString strUrl = strURLName;<BR> //判断地址是否有效,如为空或开头7个字符不是“http://"<BR> if(strUrl.IsEmpty()||strUrl.Left(7)!="http://")<BR> {<BR> AfxMessageBox("Sorry,It is a invalid address!");<BR> return FALSE;<BR> }<BR> //解析地址,得到server名字和文件路径<BR> ParseURL(strUrl);<BR> //第一步:初始化internet DLL,这是第一个被调用的函数<BR> HINTERNET hSession=::InternetOpen("Raw HTML Reader",PRE_CONFIG_INTERNET_ACCESS,<BR> "",INTERNET_INVALID_PORT_NUMBER,0);<BR><BR> //判断会话句柄是否有效<BR> if(hSession==NULL)<BR> {<BR> AfxMessageBox("Internet session initalization failed!");<BR> return FALSE;<BR> }<BR> //第二步:初始化HTTP session<BR> HINTERNET hConnect=::InternetConnect(hSession,//当前internet会话句柄<BR> m_strServer,//server name<BR> INTERNET_INVALID_PORT_NUMBER,<BR> NULL,//"",//user name<BR> "",//password<BR> INTERNET_SERVICE_HTTP,//Type of service to access<BR> 0,<BR> 0);<BR> //判断连接句柄是否有效<BR> if(hConnect==NULL)<BR> {<BR> AfxMessageBox("Internet connect initalization failed!");<BR> //关闭会话句柄<BR> VERIFY(::InternetCloseHandle(hSession));<BR> return FALSE;<BR> }<BR> <BR> //第三步:打开一个HTTP请求句柄<BR> HINTERNET hHttpFile=::HttpOpenRequest(hConnect,<BR> "GET",<BR> m_strPath,<BR> HTTP_VERSION,<BR> NULL,<BR> 0,<BR> INTERNET_FLAG_DONT_CACHE,<BR> 0);<BR> //判断连接句柄是否有效<BR> //判断会话句柄是否有效<BR> if(hHttpFile==NULL)<BR> {<BR> AfxMessageBox("Http request failed!");<BR> VERIFY(::InternetCloseHandle(hConnect));<BR> VERIFY(::InternetCloseHandle(hSession));<BR> return FALSE;<BR> }<BR><BR> //显示等待光标<BR> CWaitCursor wait;<BR><BR> //第四步:发出请求<BR> BOOL bSendRequest=::HttpSendRequest(hHttpFile,<BR> NULL,<BR> 0,<BR> 0,<BR> 0);<BR> if(bSendRequest)<BR> {<BR> //得到文件的大小<BR> char achQueryBuf[16];<BR> DWORD dwFileSize;<BR> DWORD dwQueryBufLen=sizeof(achQueryBuf);<BR> BOOL bQuery=::HttpQueryInfo(hHttpFile,<BR> HTTP_QUERY_CONTENT_LENGTH,<BR> achQueryBuf,<BR> &dwQueryBufLen,<BR> NULL);<BR> if(bQuery)<BR> {<BR> //查找成功,指出需要存放文件的内存大小???????<BR> dwFileSize=(DWORD)atol(achQueryBuf);<BR> }<BR> else<BR> {<BR> //失败,猜出一个最大文件数<BR> dwFileSize=10*1024;<BR> }<BR><BR> //分配一个缓冲区给文件数据<BR> char *lpszBuf=new char[dwFileSize+1];<BR> ZeroMemory( lpszBuf, dwFileSize+1 );<BR><BR> //读文件<BR> DWORD dwBytesRead;<BR> BOOL bRead=::InternetReadFile(hHttpFile,<BR> lpszBuf,<BR> dwFileSize+1,<BR> &dwBytesRead);<BR><BR> CMemFile* pFile = new CMemFile( (unsigned char*)lpszBuf, dwFileSize+1 );<BR> pGetFile = (CStdioFile**)&pFile;<BR><BR><BR> //清除缓冲区<BR> //delete lpszBuf;<BR><BR> // 关闭INTERNET句柄<BR> VERIFY(::InternetCloseHandle(hHttpFile));<BR> VERIFY(::InternetCloseHandle(hConnect));<BR> VERIFY(::InternetCloseHandle(hSession));<BR><BR> }<BR><BR> return TRUE;<BR>}<BR><BR>http://www.copathway.com/itbookreview/view_paper.asp?paper_id=160
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:gdfgd 回复日期:2002-10-16 11:29:03
<br>内容:徐景周:非常感谢!<BR>我现在是要读一个视频文件,边读边decode,然后播放,就像流文件播放一样!<BR>因此不可能一下子全读过来,我需要将它分批读到一个list中,因此我调用<BR>Read时都是指定buff大小和size的,这个buff长度肯定远远小于文件的长度!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:徐景周 回复日期:2002-10-16 14:09:39
<br>内容:可试着调整一下buff大小,以适应最佳状态。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:gdfgd 回复日期:2002-10-16 14:15:12
<br>内容:我已经搞定了,因为我需要循环读,我把session建成局部变量了,所以读一次后<BR>session就丢失了,第二次读就没法读了!<BR>谢谢你的热情,多联系!我是做视频的,一般是linux上的c++做的,只不过现在想<BR>弄个ocx测试一下,所以才弄VC,我对VC不是很熟!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -