Share via


ATLCollections サンプル : ICollectionOnSTLImpl、CComEnumOnSTL、およびカスタム コピー ポリシーの各クラスの例

更新 : 2007 年 11 月

ATLCollections サンプルでは、ICollectionOnSTLImplCComEnumOnSTL の使用例と、カスタム コピー ポリシー クラスの実装例を示します。

s8cb31f2.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. ソリューション ファイル ATLCollections.sln を開きます。

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

  3. [デバッグ] メニューの [デバッグなしで開始] をクリックします。これにより、指定された C++ クライアントを使用してコレクションをテストできます。このクライアントは、Count プロパティと Item プロパティを使用してループし、_NewEnum プロパティを使用してアイテムを列挙することにより、コレクションの内容をコマンド ウィンドウに出力します。IItems インターフェイスの Add、Remove、および Clear の各メソッドもテストされます。

サンプルについて

このプロジェクトでは、STL コンテナに格納されているデータに基づく、以下の 2 つの COM コレクションを実装します。

  • 2 つのクラスのうち単純な方の CWords は、std::vectorstd::strings として格納されているデータに基づく読み取り専用の BSTR コレクションです。このクラスでは、VCUE_Copy.h と VCUE_CopyString.h で定義されているカスタム コピー ポリシー クラス VCUE::GenericCopy を使用して、std::strings のデータをコレクションまたは列挙子インターフェイスに対応する型に変換します。

  • 2 番目の CItems クラスは、std::map に格納されているデータに基づく読み取り/書き込み VARIANT コレクションです。マップ内の CComVariant データは、CComBSTR (実際には CAdapt<CComBSTR>) をキーとして使用します。このクラスは、VCUE_Copy.h で定義されているカスタム コピー ポリシー クラス VCUE::MapCopy を使用して、格納されているデータを COM クライアントに戻すことのできる VARIANT に変換します。CItems は、VCUE_Collections.h で定義されている VCUE::ICollectionOnSTLCopyImpl クラスから派生します。VCUE::ICollectionOnSTLCopyImpl クラスは ICollectionOnSTLImpl から派生し、get__NewEnum をオーバーライドするため、各列挙子はコレクション データの独自のコピーを持ちます。CItems は、コレクション インターフェイスの Add、Remove、および Clear の各メソッドを実装します。

キーワード

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

_Copy, CComEnumOnSTL, ICollectionOnSTLImpl, CAdapt, IEnumVARIANT, std::map, std::string, std::vector

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

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

参照

その他の技術情報

ATL サンプル