ASYNC 属性サンプル : データを非同期にダウンロード

更新 : 2007 年 11 月

ASYNC 属性サンプルは、URL からデータを非同期にダウンロードするコントロールを作成します。このコントロールは IBindStatusCallback インターフェイスを実装します。通常は、大きなバイナリ オブジェクトやプロパティをダウンロードするときに、非同期ダウンロードを使用します。非同期ダウンロードでは、ネットワーク操作に時間がかかる可能性がある場合でも、コントロールのユーザー インターフェイスがブロックされません。また、ユーザーがダウンロードを中止することもできます。ATL では、WinInet 関数を内部的に使用して、非同期のダウンロードを実装します。

ASYNC サンプルは、このサンプルの属性なしバージョンです。

83dhzbky.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。

サンプルとそのインストール手順を取得するには

  • Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。

    詳細については、「サンプル ファイルの格納場所」を参照してください。

  • 使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。

  • サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。

サンプルのビルドと実行

このサンプルをビルドして実行するには

  1. ソリューション ファイル async.sln を開きます。

  2. [ビルド] メニューの [ソリューションのビルド] をクリックします。

  3. サンプルをビルドしたら、Web ブラウザで ATLAsync.htm を開き、表示される指示に従います。これで、ASYNC コントロールの URL プロパティが設定され、ダウンロードが開始されます。ダウンロードされたデータは、ASYNC コントロールに表示されます。

ActiveX コントロール テスト コンテナでコントロールをテストできます。テスト コンテナにアクセスしてコントロールをテストする方法の詳細については、「テスト コンテナでのプロパティとイベントのテスト」を参照してください。

サンプルの動作

ASYNC は、URL という 1 つのプロパティを持つ、サブクラス化されたエディット コントロールを作成します。URL プロパティは BSTR であり、データを指す URL を表します。ASYNC サンプルでは、ATL CBindStatusCallback クラスを使用して非同期のダウンロードを実装します。コントロールのユーザーが URL プロパティを設定すると、ASYNC は CBindStatusCallback オブジェクトを作成します。次に、CBindStatusCallback::StartAsyncDownload メソッドが呼び出され、URL とコールバック関数へのポインタが渡されます。この CAtlAsync::OnData 関数は、CBindStatusCallback オブジェクトによって呼び出されます。また、URL から受信したバイナリ データが渡されます。CAtlAsync::OnData は、受信したデータをサブクラス化されたエディット コントロールに送信します。このエディット コントロールにデータが表示されます。

ATL を使用して Windows コントロールをスーパークラス化する方法の例については、ATL SubEdit サンプルに関するトピックを参照してください。

属性

このサンプルでは次の属性を使用します。

coclass、default、dual、helpstring、id、implements_category、in、module、object、out、pointer_default、progid、propget、propput、registration_script、retval、threading、uuid、version、vi_progid

キーワード

このサンプルでは、次のキーワードを使用します。

ALT_MSG_MAP; ATLTRACE ; BEGIN_COM_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; BEGIN_PROPERTY_MAP; CBindStatusCallback::Download; CComBSTR::Append; CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRoot; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; DECLARE_REGISTRY_RESOURCEID; DisableThreadLibraryCalls; DLL_PROCESS_ATTACH; DLL_PROCESS_DETACH; DllMain; END_COM_MAP; END_MSG_MAP; END_OBJECT_MAP; END_PROPERTY_MAP; IDataObjectImpl; IDispatchImpl; IObjectSafetyImpl; IOleControlImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceObjectWindowlessImpl; IOleInPlaceObjectWindowlessImpl::SetObjectRects; IOleObjectImpl; IPerPropertyBrowsingImpl; IPersistPropertyBagImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; IsWindow; IViewObjectExImpl; MESSAGE_HANDLER; OBJECT_ENTRY; PROP_ENTRY; SendMessage; USES_CONVERSION

83dhzbky.alert_note(ja-jp,VS.90).gifメモ :

このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。

参照

その他の技術情報

ATL 属性のサンプル