IE8ボックスでURLDownloadToFileを使用する方法(クラッシュしないのはいいことです)
-
06-07-2019 - |
質問
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;
これは私が現在使用しているものです-コンテンツを含むバッファが必要ですが、このコードを変更してファイルに書き込むことはそれほど問題ではないはずです
所属していません StackOverflow