Ejemplo ATLCollections: muestra ICollectionOnSTLImpl, CComEnumOnSTL y clases personalizadas de directivas de copia

Actualización: noviembre 2007

El ejemplo ATLCollections muestra el uso de ICollectionOnSTLImpl y CComEnumOnSTL, así como la implementación de clases de directivas de copia personalizadas.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.

Generar y ejecutar el ejemplo

Para generar y ejecutar este ejemplo

  1. Abra el archivo de solución ATLCollections.sln.

  2. En el menú Generar, haga clic en Generar solución.

  3. En el menú Depurar, haga clic en Iniciar sin depurar. Esto probará las colecciones utilizando el cliente de C++ suministrado. Este cliente presenta el contenido de las colecciones en una ventana de comandos mediante un bucle que utiliza las propiedades Count e Item, y por medio de la propiedad _NewEnum, que permite enumerar los elementos. También se prueban los métodos Add, Remove y Clear de la interfaz IItems.

Acerca del ejemplo

Este proyecto implementa dos colecciones COM basadas en datos almacenados en contenedores STL:

  • La más simple de las dos clases, CWords, es una colección BSTR de sólo lectura basada en datos almacenados como std::strings en un std::vector. Esta clase utiliza la clase de directiva de copia personalizada VCUE::GenericCopy, definida en VCUE_Copy.h y VCUE_CopyString.h, para convertir los datos de std::strings al tipo apropiado para la colección o interfaz de enumerador.

  • La segunda clase, CItems, es una colección VARIANT de sólo lectura basada en datos almacenados en un std::map. Los datos CComVariant del mapa utilizan CComBSTRs (realmente **CAdapt<CComBSTR>**s) como claves. Esta clase utiliza la clase de directiva de copia personalizada VCUE::MapCopy, definida en VCUE_Copy.h, para convertir los datos almacenados al tipo VARIANT que se puede pasar a los clientes COM. CItems deriva de la clase VCUE::ICollectionOnSTLCopyImpl, definida en VCUE_Collections.h. La última clase deriva de ICollectionOnSTLImpl y reemplaza a get__NewEnum, de forma que cada enumerador dispone de su propia copia de los datos de la colección. CItems implementa los métodos Add, Remove y Clear de la interfaz de la colección.

Palabras clave

En este ejemplo se utilizan las siguientes palabras clave:

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

Nota:

Algunos ejemplos, como éste, no se han modificado para reflejar los cambios en los asistentes, las bibliotecas y el compilador de Visual C++, pero, aun así, muestran cómo realizar la tarea deseada.

Vea también

Otros recursos

Ejemplos de ATL