ATLCollections サンプル : ICollectionOnSTLImpl、CComEnumOnSTL、およびカスタム コピー ポリシーの各クラスの例
更新 : 2007 年 11 月
ATLCollections サンプルでは、ICollectionOnSTLImpl と CComEnumOnSTL の使用例と、カスタム コピー ポリシー クラスの実装例を示します。
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
このサンプルをビルドして実行するには
ソリューション ファイル ATLCollections.sln を開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
[デバッグ] メニューの [デバッグなしで開始] をクリックします。これにより、指定された C++ クライアントを使用してコレクションをテストできます。このクライアントは、Count プロパティと Item プロパティを使用してループし、_NewEnum プロパティを使用してアイテムを列挙することにより、コレクションの内容をコマンド ウィンドウに出力します。IItems インターフェイスの Add、Remove、および Clear の各メソッドもテストされます。
サンプルについて
このプロジェクトでは、STL コンテナに格納されているデータに基づく、以下の 2 つの COM コレクションを実装します。
2 つのクラスのうち単純な方の CWords は、std::vector に std::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
メモ : |
---|
このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。 |