C++/WinRT
C++/WinRT es una moderna proyección de lenguaje C++17 totalmente estándar para las API de Windows Runtime (WinRT), implementada como una biblioteca basada en archivos de encabezado y diseñada para darte acceso de primera clase a la API moderna de Windows. Con C++/WinRT, puedes crear y consumir API de Windows Runtime mediante cualquier compilador de C++17 compatible con estándares. Windows SDK incluye C++/WinRT; se introdujo en la versión 10.0.17134.0 (Windows 10, versión 1803).
C++/WinRT está destinado a todo desarrollador interesado en la escritura de código atractivo y rápido para Windows. Y esto es así por las siguientes razones.
Caso de C++/WinRT
El lenguaje de programación C++ se usa tanto en el segmento empresarial como en el de los fabricantes de software independientes (ISV) para aplicaciones donde se valoran altos niveles de corrección, calidad y rendimiento. Por ejemplo, programación de sistemas; sistemas móviles e incrustados con restricción de recursos; juegos y gráficos; controladores de dispositivo; y aplicaciones industriales, científicas y médicas, por nombrar algunas.
Desde el punto de vista del lenguaje, C++ siempre ha tenido por objeto la creación y el consumo de abstracciones ligeras y con numerosos tipos. Pero el lenguaje ha cambiado radicalmente desde los punteros sin procesar, los bucles sin procesar y la meticulosa asignación y liberación de memoria de C++98. El lenguaje C++ moderno (desde C++11 en adelante) se caracteriza por una clara expresión de ideas, simplicidad, legibilidad y una probabilidad mucho menor de introducir errores.
Para crear y consumir API de Windows mediante C++, existe C++/WinRT. Esta es la sustitución recomendada de Microsoft para la proyección de lenguaje C++/CX y la Biblioteca de plantillas C++ de Windows en tiempo de ejecución (WRL).
Cuando uses C++/WinRT, utilizarás tipos de datos, algoritmos y palabras clave estándar de C++. La proyección tiene sus propios tipos de datos personalizados, pero en la mayoría de los casos no es necesario conocerlos ya que proporcionan conversiones adecuadas hacia y desde los tipos estándar. De este modo, puedes seguir usando las características estándar del lenguaje C++ al que estás acostumbrado y el código fuente que ya tienes. C++/WinRT hace que sea sumamente fácil llamar a las API de Windows en cualquier aplicación de C++, desde Win32 hasta Windows AppSDK a UWP.
C++/WinRT funciona mejor y produce archivos binarios más pequeños que cualquier otra opción de lenguaje de Windows Runtime. Incluso supera al código manuscrito mediante el uso de las interfaces ABI directamente. Esto se debe a que las abstracciones usan modernos giros de C++ que el compilador de Visual C++ está diseñado para optimizar. Por ejemplo, estática mágica, clases base vacías, elisión strlen, así como muchas optimizaciones más recientes de la última versión de Visual C++ destinada específicamente a mejorar el rendimiento de C++/WinRT.
Hay maneras de introducir C++/WinRT gradualmente en los proyectos. Puede usar componentes de Windows Runtime o puede interoperar con C++/CX. Para obtener más información, consulte Interoperabilidad entre C++/WinRT y C++/CX.
Para obtener información sobre cómo migrar a C++/WinRT, consulte estos recursos.
Consulte también ¿Dónde puedo encontrar aplicaciones de ejemplo de C++/WinRT?.
Temas sobre C++/WinRT
Tema | Descripción |
---|---|
Introducción a C++/WinRT | Una introducción a C++/WinRT, esto es, una proyección de lenguaje C++ estándar para las API de Windows Runtime. |
Introducción a C++/WinRT | Para ponerte al día con el uso de C++/WinRT, este tema te guía a través de un ejemplo de código sencillo. |
Novedades de C++/WinRT | Noticias y cambios en C++/WinRT. |
Preguntas frecuentes | Respuestas a preguntas que probablemente tengas acerca de la creación y el consumo de las API de Windows Runtime con C++/WinRT. |
Solución de problemas | La tabla de síntomas y remedios de solución de problemas de este tema puede resultarte útil si vas a cortar nuevo código o a migrar una aplicación existente. |
Aplicación de ejemplo de C++/WinRT de Photo Editor | Photo Editor es una aplicación de ejemplo para UWP que muestra el desarrollo con la proyección de lenguaje de C++/WinRT. La aplicación de ejemplo permite recuperar fotos de la biblioteca Imágenes y, a continuación, modificar la imagen seleccionada con distintos efectos fotográficos. |
Control de cadenas | Con C++/WinRT, puedes llamar a las API de Windows Runtime mediante tipos de cadena anchos de C++ estándar, o puedes usar el tipo winrt::hstring. |
Tipos de datos de C++ estándar y C++/WinRT | Con C++/WinRT, puedes llamar a las API de Windows Runtime mediante tipos de datos de C++ estándar. |
Conversión boxing y unboxing de valores a IInspectable | Un valor escalar o matricial debe estar encapsulado dentro de un objeto de clase de referencia antes de pasarlo a una función que espera IInspectable. Dicho proceso de encapsulación se conoce como la conversión boxing del valor. |
Consumir API con C++/WinRT | En este tema se muestra cómo usar las API de C++/WinRT, tanto si se han implementado mediante Windows, un proveedor de componentes de terceros o por tu cuenta. |
Crear API con C++/WinRT | En este tema se muestra cómo crear las API de C++/WinRT mediante la estructura base winrt::implements, directa o indirectamente. |
Control de errores con C++/WinRT | En este tema se describen estrategias para controlar los errores de programación con C++/WinRT. |
Controlar eventos usando delegados | En este tema se muestra cómo registrar y revocar delegados de control de eventos con C++/WinRT. |
Crear eventos | En este tema se muestra cómo crear un componente de Windows Runtime con una clase en tiempo de ejecución que genera eventos. También se muestra una aplicación que consume el componente y controla los eventos. |
Colecciones con C++/WinRT | C++/WinRT proporciona funciones y clases base que te ahorrarán mucho tiempo y esfuerzo cuando quieras implementar o pasar colecciones. |
Operaciones simultáneas y asincrónicas | En este tema se muestra cómo puedes crear y consumir objetos asincrónicos de Windows Runtime con C++/WinRT. |
Simultaneidad y asincronía avanzadas | Escenarios avanzados con simultaneidad y asincronía en C++/WinRT. |
Un ejemplo de origen de finalización | Muestra cómo puede crear y consumir su propia clase de origen de finalización. |
Controles de XAML; enlazar a una propiedad de C++/WinRT | Una propiedad que se puede enlazar de forma eficaz a un control de XAML se conoce como una propiedad observable. En este tema se muestra cómo implementar y consumir una propiedad observable y cómo enlazar un control de XAML a dicha propiedad. |
Controles de elementos de XAML; enlazar a una colección C++/WinRT | Una colección que se puede enlazar de forma eficaz a un control de elementos de XAML se conoce como una colección observable. En este tema se muestra cómo implementar y consumir una colección observable y cómo enlazar un control de elementos de XAML a dicha colección. |
Controles (con plantilla) personalizados de XAML con C++/WinRT | Este tema te guía por los pasos de creación de un control personalizado sencillo con C++/WinRT. Puedes usar esta información para crear tus propios controles de interfaz de usuario repletos de características y personalizables. |
Pasar parámetros a las API proyectadas | C++/WinRT simplifica el paso de parámetros a las API proyectadas proporcionando conversiones automáticas para casos comunes. |
Consumir componentes COM con C++/WinRT | En este tema se usa un ejemplo de código completo de Direct2D para mostrar cómo utilizar C++/WinRT para consumir clases e interfaces COM. |
Crear componentes COM con C++/WinRT | C++/WinRT puede ayudarte a crear componentes COM clásicos, igual que te ayuda a crear clases de Windows Runtime. |
Migrar a C++/WinRT desde C++/CX | En este tema se describen los detalles técnicos implicados en la portabilidad del código fuente de un proyecto de C++/CX a su equivalente de C++/WinRT. |
Interoperabilidad entre C++/WinRT y C++/CX | En este tema se muestran dos funciones auxiliares que pueden usarse para realizar la conversión entre objetos de C++/CX y C++/WinRT. |
Asincronía e interoperabilidad entre C++/WinRT y C++/CX | Este es un tema avanzado relacionado con la migración gradual de C++/CX a C++/WinRT. Muestra cómo las tareas y las corrutinas de la Biblioteca de patrones paralelos(PPL) pueden existir en paralelo en el mismo proyecto. |
Migrar a C++/WinRT desde WRL | En este tema se muestra cómo portar código de la Biblioteca de plantillas C++ de Windows Runtime (WRL) a su equivalente en C++/WinRT. |
Portabilidad del ejemplo de Clipboard a C++/WinRT desde C# (caso práctico) | En este tema se presenta un caso práctico de portabilidad de las aplicaciones para la Plataforma universal de Windows (UWP) de ejemplo de C# a C++/WinRT. Para practicar y ganar experiencias de portabilidad, puedes seguir el tutorial y portar el ejemplo por tu cuenta a medida que avanzas. |
Migrar a C++/WinRT desde C# | En este tema se catalogan de forma exhaustiva los detalles técnicos implicados en la migración del código fuente de un proyecto de C# a su equivalente de C++/WinRT. |
Interoperabilidad entre C++/WinRT y la ABI | En este tema se muestra cómo realizar la conversión entre la interfaz binaria de aplicaciones (ABI) y objetos de C++/WinRT. |
Referencias fuertes y débiles de C++/WinRT | Windows Runtime es un sistema con recuento de referencias y en este tipo de sistemas es importante conocer el significado de referencias fuertes y débiles y la diferencia entre ellas. |
Objetos ágiles | Un objeto ágil es aquel al que se puede acceder desde cualquier subproceso. Los tipos de C++/WinRT son ágiles de manera predeterminada, pero puedes excluirlos. |
Diagnóstico de asignaciones directas | Este tema analiza en profundidad una característica de C++/WinRT 2.0 que le ayuda a diagnosticar el error que se produce al crear un objeto de tipo de implementación en la pila, en lugar de usar la familia winrt::make de aplicaciones auxiliares como correspondería. |
Puntos de extensión para los tipos de implementación | Estos puntos de extensión en C++/WinRT 2.0 permiten aplazar la destrucción de los tipos de implementación, a fin de realizar consultas de forma segura durante la destrucción y enlazar la entrada y salida de los métodos proyectados. |
Ejemplo básico de biblioteca de interfaz de usuario de Windows 2 para C++/WinRT (UWP) | Este tema le ayudará durante el proceso de adición de compatibilidad básica para la biblioteca de la interfaz de usuario de Windows (WinUI) a su proyecto UWP en C++/WinRT. En concreto, este tema trata sobre WinUI 2, que es para aplicaciones para UWP. |
Componentes de Windows Runtime con C++/WinRT | En este tema se muestra cómo usar C++/WinRT para crear y consumir un componente de Windows Runtime, que es un componente que se puede llamar desde una aplicación universal de Windows compilada mediante el lenguaje de Windows Runtime. |
Creación de un componente de Windows Runtime con C# para usar desde una aplicación de C++/WinRT | Este tema le guía por el proceso de agregar un componente sencillo de C# a un proyecto de C++/WinRT. |
Visualización de depuración nativa de Visual Studio (natvis) para C++/WinRT | La extensión de Visual Studio C++/WinRT (VSIX) proporciona a Visual Studio visualización de depuración nativa (natvis) de tipos proyectados de C++/WinRT. Esto proporciona una experiencia similar a la depuración de C#. |
Macros de configuración | En este tema se describen las macros de configuración de C++/WinRT. |
Convenciones de nomenclatura de C++/WinRT | En este tema se explican las convenciones de nomenclatura que C++/WinRT ha establecido. |
Temas sobre el lenguaje C++
Tema | Descripción |
---|---|
Categorías de valor y referencias a ellas | En este tema se describen las distintas categorías de valores que existen en C++. Sin duda habrás oído hablar de lvalues y rvalues, pero existen también otros tipos. |