ファイルとしてダウンロード前節ではURLモニカを使用してIStreamを取得し、ストリームに格納されているデータをファイルとして保存することで、ダウンロードを再現しました。合せてストリームの中身を明示的に保存するという煩わしさも生じていました。Monikersは用意されています。この関数を呼び出すだけでファイルのダウンロードが可能です。NULL);第2引数にダウンロードしたいURLを指定し、第3引数にファイルとして保存するパスを指定します。第1引数はNULLでよく、第4引数は予約されているため0を指定します。第5引数はIBindStatusCallbackを指定できますが、NULLで問題ありません。制御を返した時点でダウンロードは完了しているはずです。特定のURLの中身をファイルとして保存するのではなく、IStreamで受け取りたい場合があるかもしれません。このような場合は、URLOpenBlockingStreamを呼び出します。NULL);第2引数にダウンロードしたいURLを指定し、第3引数にIStreamを受け取る変数のアドレスを指定します。それ以外の引数については、URLDownloadToFileと同様です。URLモニカによる明示的なバインドを行わず、バインドをラッピングしたURLDownloadToFileを呼び出しています。明示的にバインドを行うわけではないので、IMonikerやIBindCtxのようなメンバを持っていません。URLDownloadToFileはデータを自分でダウンロードするため、データが使用可能になったことを示すIBindStatusCallbackが呼ばれることはありません。内部的にはWinINetのAPIを呼び出しているものと考えられます。IBindStatusCallback::OnStartBindingに渡されるIBindingをメンバとして保存します。WinINetのHttpQueryInfoを使用するためのIWinInetHttpInfoを取得できます。任意のメソッドでこうしたインターフェースを使用できたら便利であるため、メンバとして保存しています。この際にHTTPプロトコルのステータスコードを調べる例を示します。S_OK;}保存しておいたIBindingからIWinInetHttpInfoを照会し、QueryInfoを呼び出しています。このメソッドの引数については、HttpQueryInfoと同じ意味を持ちます。数値として受け取りたいのであればHTTP_QUERY_FLAG_NUMBERも指定します。HTTP_STATUS_NOT_FOUND(404)ならばファイルが見つからなかったことを意味します。