ATLCollections 示例:演示 ICollectionOnSTLImpl、CComEnumOnSTL 和自定义复制策略类

更新:2007 年 11 月

ATLCollections 示例说明 ICollectionOnSTLImplCComEnumOnSTL 的使用及自定义复制策略类的实现。

安全说明:

提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。

获取示例和安装示例的说明:

  • 在 Visual Studio 的“帮助”菜单上,单击“示例”。

    有关更多信息,请参见定位示例文件

  • 示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。

  • 还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。

生成并运行示例

生成并运行此示例

  1. 打开解决方案文件 ATLCollections.sln。

  2. 在“生成”菜单中,单击“生成解决方案”。

  3. 在“调试”菜单中,单击“开始执行(不调试)”。这将使用所提供的 C++ 客户端测试集合。该客户端将集合的内容输出到命令窗口,方法是使用 Count 和 Item 属性循环遍历并使用 _NewEnum 属性枚举这些项。IItems 接口的 Add、Remove 和 Clear 方法也得到了测试。

示例说明

基于存储在 STL 容器中的数据,该项目实现两个 COM 集合:

  • 两个类中较简单的CWords 是一个只读 BSTR 集合,该集合基于以 std::string 形式存储在 std::vector 中的数据。该类使用自定义复制策略类 VCUE::GenericCopy(在 VCUE_Copy.h 和 VCUE_CopyString.h 中定义)将数据从 std::string 转换为适合于集合或枚举数接口的类型。

  • 第二个类 CItems 是一个基于存储在 std::map 中数据的读写 VARIANT 集合。映射中的 CComVariant 数据使用 CComBSTR(实际上是 CAdapt<CComBSTR>)作为键。该类使用自定义复制策略类 VCUE::MapCopy(在 VCUE_Copy.h 中定义)将存储的数据转换为可以传递回 COM 客户端的 VARIANT。CItems 从 VCUE_Collections.h 中定义的 VCUE::ICollectionOnSTLCopyImpl 类派生。后面的类从 ICollectionOnSTLImpl 派生并重写 get__NewEnum 以便每个枚举数都有自己的集合数据副本。CItems 在集合接口中实现 Add、Remove 和 Clear 方法。

关键字

此示例使用以下关键字:

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

说明:

其中某些示例(如此示例)尚未经过修改以反映 Visual C++ 向导、库和编译器中所做的更改,但仍演示了如何完成所需的任务。

请参见

其他资源

ATL 示例