IE8ボックスでURLDownloadToFileを使用する方法(クラッシュしないのはいいことです)

StackOverflow https://stackoverflow.com/questions/1018389

質問

C ++アプリを使用しました( thisに似ています) 1つ URLDownloadToFile メソッド(urlmon.dllで定義)を使用してファイルをダウンロードします。 IE8までは、進行状況コールバックで E_ABORT を返すことでダウンロードを中止できました。

IE8がインストールされているシステムでは、プログラムがクラッシュし、エラーレポートが生成されます。

URLDownloadToFile を介して起動されたダウンロードをキャンセルする代替方法を知っている人はいますか?

役に立ちましたか?

解決

ジョエルこのような問題がありました。彼はそれをあきらめてandしました(不正行為とは、転送をキャンセルすると、ユーザーに転送が見えなくなることを意味しますが、それでも続行します)。 WinInetにはバグがありました...

他のヒント

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;

これは私が現在使用しているものです-コンテンツを含むバッファが必要ですが、このコードを変更してファイルに書き込むことはそれほど問題ではないはずです

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top