如何在IE8盒子上使用URLDownloadToFile(没有崩溃会很好)?

时间:2009-06-19 14:49:38

标签: c++ winapi internet-explorer-8 urlmon

我是一个使用URLDownloadToFile方法(在urlmon.dll中定义)下载文件的C ++应用程序(类似于this one)。 在IE8之前,可以通过在进程回调中返回E_ABORT来中止下载。

在已安装IE8的系统上,这样做会导致程序崩溃,并生成错误报告。

是否有人知道取消通过URLDownloadToFile启动的下载的替代方法?

2 个答案:

答案 0 :(得分:1)

如果您正在使用MFC,您是否考虑过使用CInternetSession和CHttpFile?

我正在使用这些没有任何问题(已安装IE8)

我正在使用的一小段代码:

CInternetSession internetSession;

CHttpFile *pHttpFile = 
    reinterpret_cast< CHttpFile* >( internetSession.OpenURL( L"www.example.com" ) );

DWORD dwStatusCode;
if ( pHttpFile->QueryInfoStatusCode( dwStatusCode ) && 
    dwStatusCode == HTTP_STATUS_OK )
{
    char szBuffer[ BUFFER_SIZE ];
    DWORD dwBufferIndex = 0;

    DWORD dwBytesRead = (DWORD)pHttpFile->Read( &szBuffer[ dwBufferIndex ], CHUNK_SIZE );
    while ( dwBytesRead > 0 && dwBufferIndex < BUFFER_SIZE )
    {
        dwBufferIndex += dwBytesRead;

        // break out if cancelled 
        if ( m_bCancel )
            break;

        dwBytesRead = (DWORD)pHttpFile->Read( &szBuffer[ dwBufferIndex ], CHUNK_SIZE );
    }

    szBuffer[ dwBufferIndex ] = '\0';

    // szBuffer now contains the file contents
}

pHttpFile->Close();
delete pHttpFile;

这就是我目前正在使用的 - 我需要一个包含内容的缓冲区,但是修改此代码以写入文件应该不会有太多问题。

答案 1 :(得分:1)

Joel有这样的问题。他放弃了并作弊(作弊意味着取消转移导致转移不再对用户可见,但仍然继续)。 WinInet有一个错误......