Extensiones de componentes para plataformas de tiempo de ejecución

 

Para obtener la documentación más reciente de Visual Studio 2017, consulte Documentación de Visual Studio 2017.

Visual C++ proporciona extensiones de lenguaje para ayudarle a programar en plataformas del runtime. Mediante Extensiones de componentes de Visual C++ (C++/CX), puede programar aplicaciones y componentes de la Tienda Windows 8.x que se compilan en código nativo. Aunque puede crear aplicaciones de la Tienda Windows 8.x programando directamente en las interfaces COM de Windows en tiempo de ejecución mediante C++/CX, puede usar constructores, excepciones y otras expresiones de programación moderna de C++. Para habilitar la programación en C++ en un entorno de ejecución administrado en la plataforma .NET, puede usar C++/CLI.

Dos runtime, un conjunto de extensiones

C++/CX es un subconjunto de C++/CLI. Para las extensiones comunes a C++/CX y C++/CLI, la semántica depende de si el destino es Common Language Runtime (CLR) o Windows en tiempo de ejecución. Para compilar la aplicación para que se ejecute en Windows en tiempo de ejecución, especifique la opción del compilador /ZW. Para compilarlo para que se ejecute en CLR, especifique la opción del compilador /clr. Estos modificadores se establecen automáticamente cuando se usa Visual Studio para crear un proyecto.

Para obtener más información sobre cómo crear aplicaciones de la Tienda Windows 8.x en C++, vea Guía básica para aplicaciones de Windows en tiempo de ejecución con C++.

C++/CLI extiende el estándar C++ de ANSI/ISO, y se define en la norma ECMA C++/CLI. Para obtener información, vea Programación de .NET con C++/CLI.

Las extensiones de lenguaje incluyen palabras clave agregadas, que son palabras clave que constan de dos tokens separados por espacios en blanco. Los tokens pueden tener un significado cuando se usan por separado, y otro significado cuando se usan juntos. Por ejemplo, la palabra “ref” es un identificador normal, y la palabra “clase” es una palabra clave que declara una clase nativa. Pero cuando estas palabras se combinan para formar ref class, la palabra clave agregada resultante declara una entidad denominada clase en tiempo de ejecución.

Las extensiones también incluyen palabras clave contextuales. Una palabra clave se trata como contextual en función del tipo de instrucción que la contenga, y de su posición en esa instrucción. Por ejemplo, el token “property” puede ser un identificador, o puede declarar una clase especial de miembro de clase pública.

En la tabla siguiente se enumeran las palabras clave en la extensión del lenguaje C++.

Palabra claveContextualFinalidadReferencia
ref class

 ref struct
NoDeclara una clase.Clases y structs
value class

 value struct
NoDeclara una clase de valor.Clases y structs
interface class

 interface struct
NoDeclara una interfaz.clase de interfaz
enum class

 enum struct
NoDeclara una enumeración.enum class
propertyDeclara una propiedad.propiedad
delegateDeclara un delegado.delegado
eventDeclara un evento.event

Puede usar las palabras clave siguientes para calificar el comportamiento de invalidación de la derivación. Aunque la palabra clave new no es una extensión de C++, se muestra aquí porque se puede usar en un contexto adicional. Algunos especificadores también son válidos para la programación nativa. Para obtener más información, vea Cómo: Declarar especificadores de invalidación en las compilaciones nativas.

Palabra claveContextualFinalidadReferencia
abstractIndica que las funciones o las clases son abstractas.abstractas
newNoIndica que una función no es una invalidación de una versión de la clase base.new (nueva ranura en vtable)
overrideIndica que un método debe ser una invalidación de una versión de la clase base.override
sealedEvita que las clases se usen como clases base.sellado

Las palabras clave siguientes se han agregado para admitir tipos genéricos. Para obtener más información, vea Genéricos.

Palabra claveContextualPropósito
genericNoDeclara un tipo genérico.
whereEspecifica las restricciones que se aplican a un parámetro de tipo genérico.

Las palabras clave siguientes se han agregado a las extensiones de C++.

Palabra claveContextualFinalidadReferencia
finallyIndica el comportamiento predeterminado de los controles de excepciones.Control de excepciones
for each, inNoEnumera los elementos de una colección.for each, in
gcnewNoAsigna tipos en el montón de recolección de elementos no utilizados. Úselo en lugar de new y delete.ref new, gcnew
ref newAsigna un tipo Windows en tiempo de ejecución. Úselo en lugar de new y delete.ref new, gcnew
initonlyIndica que un miembro solo se puede inicializar en la declaración o en un constructor estático.initonly
literalCrea una variable literal.literal
nullptrNoIndica que un identificador o un puntero no señalan un objeto.nullptr

Las construcciones de lenguaje siguientes se implementan como plantillas, en lugar de como palabras clave. Si especifica la opción del compilador /ZW, se definen en el espacio de nombres lang. Si especifica la opción del compilador /clr, se definen en el espacio de nombres cli.

Palabra claveFinalidadReferencia
arrayDeclara una matriz.Matrices
interior_ptr(solo CLR) Apunta a los datos de un tipo de referencia.interior_ptr (C++/CLI)
pin_ptr(solo CLR) Apunta a los tipos de referencia CLR para suprimir temporalmente el sistema de recolección de elementos no utilizados.pin_ptr (C++/CLI)
safe_castDetermina y ejecuta el método óptimo de conversión para un tipo de runtime.safe_cast
typeid(solo CLR) Recupera un objeto System.Type que describe el tipo o el objeto especificado.typeid

Los declaradores de tipo siguientes indican al runtime que debe administrar automáticamente la duración y eliminación de los objetos asignados.

OperadorFinalidadReferencia
^Declara un identificador a un objeto; es decir, un puntero a un objeto Windows en tiempo de ejecución o CLR que se elimina automáticamente cuando ya no se usa.Identificador a un operador de objeto (^)
%Declara una referencia de seguimiento; es decir, una referencia a un objeto Windows en tiempo de ejecución o CLR que se elimina automáticamente cuando ya no se usa.Operador de referencia de seguimiento

En esta sección se muestran construcciones de programación adicionales y temas que pertenecen a CLR.

TemaDescripción
__identifier (C++/CLI)(Windows en tiempo de ejecución y CLR) Habilita el uso de palabras clave como identificadores.
Listas de argumentos de variables (...) (C++/CLI)(Windows en tiempo de ejecución y CLR) Permite que una función tome un número variable de argumentos.
.Equivalentes de .NET Framework para tipos nativos de C++Enumera los tipos CLR que se usan en lugar de los tipos enteros de C++.
Modificador __declspec de appdomainEl modificador __declspec que requiere la existencia de variables static y globales por appdomain.
Conversiones de estilo C con /clr (C++/CLI)Describe cómo se interpretan las conversiones de tipo C.
Convención de llamada __clrcallIndica la convención de llamada conforme a CLR.
__cplusplus_cliMacros predefinidas
Custom AttributesDescribe cómo definir sus propios atributos de CLR.
Control de excepcionesProporciona información general sobre el control de excepciones.
Invalidaciones explícitasMuestra cómo las funciones miembro pueden invalidar miembros arbitrarios.
Ensamblados de confianza (C++)Explica cómo un ensamblado de cliente puede tener acceso a todos los tipos de un componente de ensamblado.
Conversión boxingMuestra las condiciones en las que a los tipos de valores se les aplica la conversión boxing.
Compatibilidad de compilador para type traitsExplica cómo detectar características de tipos en tiempo de compilación.
Pragmas managed, unmanagedMuestra cómo las funciones administradas y no administradas pueden coexistir en el mismo módulo.
Modificador __declspec de procesoEl modificador __declspec que requiere la existencia de variables static y globales por proceso.
ReflexiónMuestra la versión de CLR de la información de tipo en tiempo de ejecución.
CadenaDescribe la conversión del compilador de literales de cadena a String.
Reenvío de tipos (C++/CLI)Habilita el movimiento de un tipo en un ensamblado de envío a otro ensamblado de modo que no es necesario volver a compilar el código de cliente.
Atributos definidos por el usuarioMuestra atributos definidos por el usuario.
#using (Directiva)Importa ensamblados externos.
Documentación de XMLExplica la documentación de código basada en XML mediante el uso de /doc (procesar comentarios de documentación)

Programación de .NET con C++/CLI
Interoperabilidad nativa y de .NET

Mostrar: