Sistema de tipos (C++/CX)

Mediante la arquitectura de Windows en tiempo de ejecución, puedes utilizar C++/CX, Visual Basic, Visual C# y JavaScript para escribir aplicaciones y componentes con acceso directo a la API de Windows e interactuar con otras aplicaciones y componentes de Windows en tiempo de ejecución. Las aplicaciones Tienda Windows escritas en C++ se compilan en código nativo que se ejecuta directamente en la CPU. Las aplicaciones deTienda Windows escritas en C# o en Visual Basic se compilan en lenguaje intermedio de Microsoft (MSIL) y se ejecutan en Common Language Runtime (CLR). Las aplicaciones deTienda Windows escritas en JavaScript se ejecutan en un entorno en tiempo de ejecución. Los propios componentes del sistema operativo Windows en tiempo de ejecución se escriben en C++ y se ejecutan como código nativo. Todos estos componentes y aplicaciones de la Tienda Windows se comunican directamente a través de la interfaz binaria de aplicación (ABI) de Windows en tiempo de ejecución.

Para habilitar la compatibilidad con Windows en tiempo de ejecución en una locución de C++ moderno, Microsoft ha creado Extensiones de componentes de Visual C++ (C++/CX). C++/CX proporciona implementaciones y tipos base integrados de tipos de Windows en tiempo de ejecución fundamentales que permiten que las aplicaciones y los componentes de C++ se comuniquen a través de ABI con aplicaciones escritas en otros lenguajes. Puedes utilizar cualquier tipo de Windows en tiempo de ejecución o crear clases, structs, interfaces y otros tipos definidos por el usuario que se pueden usar en otras aplicaciones y componentes de la Tienda Windows. Una aplicación de la Tienda Windows escrita en C++/CX también puede utilizar clases y structs de C++ normal mientras no tengan accesibilidad pública.

Cuando compilas una aplicación de la Tienda Windows escrita en C++, el compilador genera el ejecutable en código máquina nativo y también genera un archivo de metadatos de Windows (.winmd) independiente que contiene descripciones de los tipos de Windows en tiempo de ejecución públicos, que incluyen clases, structs, enumeraciones, interfaces, interfaces parametrizadas y delegados. El formato de los metadatos se parece al formato que se utiliza en los ensamblados de .NET Framework. En un componente de C++, el archivo .winmd solo contiene metadatos; el código ejecutable reside en un archivo independiente. Este es el caso de los componentes de Windows en tiempo de ejecución incluidos con Windows. (Para los lenguajes de .NET Framework, el archivo de .winmd contiene el código y los metadatos, como un ensamblado de .NET Framework).

Los metadatos del archivo de .winmd representan la superficie publicada de tu código. Los tipos publicados son visibles para otras aplicaciones de Tienda Windows con independencia del lenguaje en que se escriban esas otras aplicaciones. Por consiguiente, los metadatos, o tu código publicado, solo pueden contener tipos especificados por el sistema de tipos de Windows en tiempo de ejecución. Las construcciones de lenguaje específicas de C++, como clases, matrices, plantillas o contenedores STL normales, no se pueden publicar en los metadatos porque una aplicación cliente de JavaScript o de C# no sabría lo que debería hacer con ellas.

Que un tipo o un método estén visibles en los metadatos depende de los modificadores de accesibilidad que se les aplique. Para que esté visible, un tipo se debe declarar en un espacio de nombres y como público. Una clase ref pública se permite como tipo auxiliar interno en tu código; simplemente no está visible en los metadatos. Incluso en una clase ref pública, no todos los miembros están visibles necesariamente. En la tabla siguiente se muestra la relación entre los especificadores de acceso de C++ en una clase ref pública, y la visibilidad de los metadatos de Windows en tiempo de ejecución:

Publicado en metadatos

No publicado en metadatos

public

private

protected

interno

público protegido

privado protegido

Puedes utilizar el Explorador de objetos para ver el contenido de los archivos .winmd. Los componentes de Windows en tiempo de ejecución incluidos con Windows están en el archivo Windows.winmd. El archivo default.winmd contiene los tipos fundamentales que se utilizan en C++/CX y el archivo platform.winmd contiene tipos adicionales del espacio de nombres Platform. De forma predeterminada, estos tres archivos .winmd se incluyen en todos los proyectos de C++ para aplicaciones de la Tienda Windows.

Sugerencia Sugerencia

Los tipos de Platform::Collections (Espacio de nombres) no aparecen en el archivo .winmd porque no son públicos. Son implementaciones específicas de C++ privadas de las interfaces que se definen en Windows::Foundation::Collections. Una aplicación de Windows en tiempo de ejecución escrita en JavaScript o C# no sabe qué es un objeto Platform::Collections::Vector (Clase), pero puede utilizar un objeto Windows::Foundation::Collections::IVector. Los tipos de Platform::Collections se definen en collection.h.

En las secciones siguientes se describen las características principales del sistema de tipos de Windows en tiempo de ejecución y cómo se admiten en C++/CX.

Hh755822.collapse_all(es-es,VS.120).gifEspacios de nombres

Todos los tipos de Windows en tiempo de ejecución deben declararse dentro de un espacio de nombres; la propia API de Windows se organiza mediante espacios de nombres. Un archivo .winmd debe tener el mismo nombre que el espacio de nombres de la raíz. Por ejemplo, se pueden crear instancias de una clase denominada A.B.C.MyClass solo si está definida en un archivo de metadatos denominado A.winmd, A.B.winmd o A.B.C.winmd.

La propia API de Windows se ha reinventado como una biblioteca de clases correctamente factorizada que se organiza mediante espacios de nombres. Todos los componentes de Windows en tiempo de ejecución se declaran en los espacios de nombres Windows.*.

Para obtener más información, consulta Visibilidad de espacios de nombres y tipos (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifTipos fundamentales

Windows en tiempo de ejecución define los tipos fundamentales siguientes: UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Char16, Boolean y String. C++/CX admite los tipos numéricos fundamentales en su espacio de nombres predeterminado como uint16, uint32, uint64, int16, int32, int64, float32, float64 y char16. Boolean y String también se definen en el espacio de nombres Platform.

C++/CX también define uint8, equivalente a unsigned char, que no se admite en Windows en tiempo de ejecución y no se puede utilizar en las API públicas.

Un tipo fundamental puede convertirse en un tipo que acepte valores NULL incluyéndolo en una interfaz Platform::IBox. Para obtener más información, consulta Value (Clases y structs) (C++/CX).

Para obtener más información sobre los tipos fundamentales, consulta Tipos fundamentales (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifCadenas

Una cadena de Windows en tiempo de ejecución es una secuencia inmutable de caracteres UNICODE de 16 bits. Una cadena de Windows en tiempo de ejecución se proyecta como Platform::String^. Esta clase proporciona métodos para la construcción, manipulación y conversión de cadenas a un tipo wchar_t y desde dicho tipo.

Para obtener más información, consulta Cadenas (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifMatrices

Windows en tiempo de ejecución admite matrices unidimensionales de cualquier tipo. No se admiten matrices de matrices. En C++/CX, las matrices de Windows en tiempo de ejecución se proyectan como Platform::Array (Clase).

Para obtener más información, consulta Array y WriteOnlyArray (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifClases ref y structs ref

Una clase de Windows en tiempo de ejecución se proyecta en C++/CX como una clase ref o un struct ref, porque se copian por referencia. La administración de memoria para clases ref y structs ref se controlan de forma transparente mediante el recuento de referencias. Cuando la última referencia a un objeto sale del ámbito, el objeto se destruye. Una clase ref y un struct ref pueden:

  • Contener como miembros constructores, métodos, propiedades y eventos. Estos miembros pueden tener accesibilidad pública, privada, protegida o interna.

  • Contener definiciones de clases, structs o enumeraciones de tipo anidado privado.

  • Heredar directamente de una clase base e implementar cualquier número de interfaces. Todas las clases ref se pueden convertir implícitamente a Platform::Object (Clase) y pueden invalidar sus métodos virtuales como Object::ToString.

Una clase ref que tenga un constructor público se debe declarar como sellada, para evitar la derivación adicional.

Para obtener más información, consulta Ref (Clases y structs) (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifClases y structs de valor

Una clase de valor o un struct de valor representan una estructura de datos básicos y solo contienen campos, que pueden ser clases de valor, structs de valor o Platform::String^ de tipo. Los structs de valor y las clases de valor se copian por valor.

Un struct de valor se puede convertir en un struct que acepte valores NULL incluyéndolo en una interfaz IBox.

Para obtener más información, consulta Value (Clases y structs) (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifClases parciales

La característica de clases parciales permite definir una clase en varios archivos. Se utiliza principalmente para permitir a las herramientas de generación de código como el editor de XAML modificar un archivo sin tocar el archivo que estás editando.

Para obtener más información, consulta Clases parciales (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifPropiedades

Una propiedad es un miembro de datos públicos de cualquier tipo de Windows en tiempo de ejecución y se implementa como un par de métodos get y set. El código de cliente tiene acceso a una propiedad como si fuera un campo público. Una propiedad que no requiere código de tipo get o set personalizado se conoce como propiedad trivial y se puede declarar sin métodos de tipo get o set explícitos.

Para obtener más información, consulta Propiedades (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifColecciones de Windows en tiempo de ejecución en C++/CX

Windows en tiempo de ejecución define un conjunto de interfaces para los tipos de colección que cada lenguaje implementa de manera propia. C++/CX proporciona implementaciones en Platform::Collections::Vector (Clase), Platform::Collections::Map (Clase) y otros tipos de colección concretos relacionados, que son compatibles con sus homólogos de la Biblioteca de plantillas estándar (STL).

Para obtener más información, consulta Colecciones (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifClases ref de plantilla

Las clases privadas y las clases ref internas se pueden convertir en plantillas y personalizarse para usos concretos.

Para obtener más información, consulta Clases ref de plantilla (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifInterfaces

Una interfaz de Windows en tiempo de ejecución define un conjunto de propiedades, métodos y eventos públicos que una clase ref o un struct ref deben implementar si heredan de la interfaz.

Para obtener más información, consulta Interfaces (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifEnumeraciones

Una clase de enumeración en Windows en tiempo de ejecución es similar a una enumeración con ámbito en C++. El tipo subyacente es int32, a menos que se aplique el atributo [Flags]; en ese caso, el tipo subyacente es uint32.

Para obtener más información, consulta Enumeraciones (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifDelegados

Un delegado en Windows en tiempo de ejecución es análogo a un objeto std::function en C++. Es un tipo especial de clase ref que se utiliza para invocar funciones proporcionadas por el cliente que tienen firmas compatibles. Los delegados se utilizan con mucha frecuencia en Windows en tiempo de ejecución como el tipo de un evento.

Para obtener más información, consulta Delegados (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifExcepciones

En C++/CX, puedes detectar tipos de excepción personalizados, tipos std::exception y tipos Platform::Exception.

Para obtener más información, consulta Excepciones (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifEventos

Un evento es un miembro público en una clase ref o un struct ref cuyo tipo es un tipo delegado. Un evento solo puede ser invocado, es decir desencadenado, por la clase propietaria. Sin embargo, el código de cliente puede proporcionar sus propias funciones, que se denominan controladores de eventos y se invocan cuando la clase propietaria desencadena el evento.

Para obtener más información, consulta Eventos (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifConversión

C++/CX admite los operadores de conversión estándar de C++ static_cast, dynamic_cast y reinterpret_cast, y también el operador safe_cast que es específico de C++/CX.

Para obtener más información, consulta Convertir (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifBoxing

Una variable a la que se le ha aplicado una conversión boxing es un tipo de valor incluido en un tipo de referencia usado en situaciones donde se es necesaria una semántica de referencia.

Para obtener más información, consulta Conversión boxing (C++/CX).

Hh755822.collapse_all(es-es,VS.120).gifAtributos

Un atributo es un valor de metadatos que se puede aplicar a cualquier tipo o miembro de tipo de Windows en tiempo de ejecución y se puede inspeccionar en tiempo de ejecución. Windows en tiempo de ejecución define un conjunto de atributos comunes en el espacio de nombres Windows::Foundation::Metadata. Los atributos definidos por el usuario en interfaces públicas no se admiten en esta versión e Windows en tiempo de ejecución.

Describe cómo marcar las API públicas como desusadas utilizando el mismo atributo que el usado por los tipos del sistema de Windows en tiempo de ejecución.

Para obtener más información, consulta Dejar en desuso tipos y miembros (C++/CX).

Adiciones de comunidad

Mostrar:
© 2014 Microsoft. Reservados todos los derechos.