Biblioteca de plantillas C++ de Windows en tiempo de ejecución (WRL)

La biblioteca de plantillas de C++ de Windows Runtime (WRL) es una biblioteca de plantillas que proporciona una manera de bajo nivel de crear y usar componentes de Windows Runtime.

Nota:

WRL ahora se sustituye por C++/WinRT, una proyección estándar del lenguaje C++17 para las API de Windows Runtime. C++/WinRT está disponible en Windows SDK a partir de la versión 1803 (10.0.17134.0). C++/WinRT se implementa completamente en los archivos de encabezado y está diseñado para proporcionar acceso de primera clase a la API moderna de Windows.

Con C++/WinRT se puede consumir y crear las API de Windows Runtime con cualquier compilador de C++17 que cumpla con los estándares. C++/WinRT suele funcionar mejor y produce archivos binarios más pequeños que cualquier otra opción de lenguaje de Windows Runtime. Seguiremos admitiendo C++/CX y WRL, pero recomendamos encarecidamente que las nuevas aplicaciones usen C++/WinRT. Para obtener más información, consulte C++/WinRT.

Ventajas

La biblioteca de plantillas de Windows Runtime C++ permite implementar y consumir los componentes del Modelo de objetos componentes (COM) de forma más sencilla. Proporciona técnicas de mantenimiento como el recuento de referencias para administrar la duración de los objetos y probar los valores HRESULT para determinar si una operación se realizó correctamente o no. Para utilizar correctamente la biblioteca de plantillas de Windows Runtime C++, debe seguir detenidamente estas reglas y técnicas.

C++/CX es una forma de alto nivel, basada en el lenguaje, de utilizar los componentes de Windows Runtime. Tanto la biblioteca de plantillas de Windows Runtime C++ como C++/CX simplifican la escritura de código para Windows Runtime realizando automáticamente tareas de mantenimiento en su nombre.

La biblioteca de plantillas de Windows Runtime C++ y C++/CX proporcionan diferentes ventajas. Estos son algunos de los motivos por los que es posible que quiera usar la biblioteca de plantillas de Windows Runtime C++ en lugar de C++/CX:

  • La biblioteca de plantillas de Windows Runtime C++agrega poco nivel de abstracción en la interfaz binaria de aplicación (ABI) de Windows Runtime, lo que proporciona la capacidad de controlar el código subyacente para crear o utilizar mejor las API de Windows Runtime.

  • C++/CX representa los valores HRESULT de COM como excepciones. Si has heredado una base de código que usa COM o una que no usa excepciones, es posible que encuentres que la biblioteca de plantillas de C++ de Windows Runtime es una manera más natural de trabajar con Windows Runtime porque no tienes que usar excepciones.

    Nota:

    La biblioteca de plantillas de Windows Runtime C++ usa valores HRESULT y no produce excepciones. Además, la biblioteca de plantillas de Windows Runtime C++ utiliza punteros inteligentes y el patrón RAII para garantizar que los objetos se destruyen correctamente cuando el código de la aplicación produce una excepción. Para obtener más información sobre los punteros inteligentes y RAII, consulte Punteros inteligentes y Recursos propios de los objetos (RAII).

  • El propósito y el diseño de la biblioteca de plantillas de Windows Runtime C++ están inspirados en Active Template Library (ATL), que es un conjunto de clases de C++ basadas en plantillas que permite simplificar la programación de los objetos COM. Dado que la biblioteca de plantillas de Windows Runtime C++ utiliza C++ estándar para encapsular Windows Runtime, le resultará más fácil trasladar e interactuar con diversos componentes COM existentes escritos en ATL en Windows Runtime. Si ya conoce ATL, es posible que la programación de la biblioteca de plantillas de Windows Runtime C++ sea más fácil.

Introducción

Estos son algunos recursos que pueden ayudarle a trabajar con la biblioteca de plantillas de Windows Runtime C++ inmediatamente.

Cómo: Activar y usar un componente de Windows Runtime
Muestra cómo usar la biblioteca de plantillas de Windows Runtime C++ para inicializar Windows Runtime y activar y usar un componente de Windows Runtime.

Cómo: Completar operaciones asincrónicas
Muestra cómo utilizar la biblioteca de plantillas de Windows Runtime C++ para iniciar operaciones asincrónicas y para realizar el trabajo cuando las operaciones se completan.

Cómo: Controlar eventos
Muestra cómo usar la biblioteca de plantillas de Windows Runtime C++ para suscribirse a los eventos de un objeto de Windows Runtime y controlarlo.

Tutorial: Crear una aplicación de UWP mediante WRL y Media Foundation
Obtenga información sobre cómo crear una aplicación para UWP que use Microsoft Media Foundation.

Cómo: Crear un componente COM clásico
Muestra cómo utilizar la biblioteca de plantillas de Windows Runtime C++ para crear un componente COM básico y cómo registrar y utilizar el componente COM fácilmente desde una aplicación de escritorio.

Procedimiento para crear instancias de componentes WRL directamente
Obtenga información sobre cómo utilizar las funciones Microsoft::WRL::Make y Microsoft::WRL::Details::MakeAndInitialize para crear instancias de un componente a partir del módulo que lo define.

Procedimiento para usar winmdidl.exe y midlrt.exe para crear archivos .h desde metadatos de Windows
Muestra cómo utilizar componentes personalizados de Windows en tiempo de ejecución desde la WRL mediante la creación de un archivo IDL a partir de los metadatos .winmd.

Tutorial: Conectar mediante tareas y solicitudes HTTP XML
Muestra cómo utilizar las interfaces IXMLHTTPRequest2 e IXMLHTTPRequest2Callback junto con otras tareas para enviar solicitudes HTTP GET y POST a un servicio web en una aplicación para UWP.

Ejemplo de Bing Mapas Trip Optimizer
Use la clase HttpRequest definida en Tutorial: Conectar usando tareas y solicitudes HTTP XML en el contexto de una aplicación para UWP completa.

Creación de un componente DLL de Windows Runtime con el ejemplo de C++
Muestra cómo utilizar la biblioteca de plantillas de Windows Runtime C++ para crear un componente DLL en proceso y usarlo en C++/CX, JavaScript o C#.

Ejemplo de juego de marble maze de DirectX
Muestra cómo utilizar la biblioteca de plantillas de Windows Runtime C++ para administrar la duración de los componentes COM como DirectX y Media Foundation en el contexto de un completo juego en 3D.

Notificaciones del sistema desde aplicaciones de escritorio
Muestra cómo enviar notificaciones del sistema de una aplicación de escritorio.

Biblioteca de plantillas de Windows Runtime C++ en comparación con ATL

La biblioteca de plantillas de Windows Runtime C++ se parece a Active Template Library (ATL) porque se puede utilizar para crear objetos COM pequeños de manera rápida. La biblioteca de plantillas de Windows Runtime C++ y ATL también comparten conceptos tales como definición de objetos en los módulos, el registro explícito de interfaces y la creación libre de objetos mediante generadores. Es posible que esté familiarizado con la biblioteca de plantillas de Windows Runtime C++ si está familiarizado con ATL.

La biblioteca de plantillas de Windows Runtime C++ admite la funcionalidad COM necesaria para las aplicaciones para UWP. Por consiguiente, y a diferencia de ATL, omite la compatibilidad directa para características COM como:

  • agregación

  • implementaciones estándar

  • interfaces duales (IDispatch)

  • interfaces de enumerador estándar

  • puntos de conexión

  • interfaces divisibles

  • incrustación OLE

  • Controles ActiveX

  • COM+

Conceptos

La biblioteca de plantillas de Windows Runtime C++ proporciona tipos que representan algunos conceptos básicos. En las siguientes secciones se describen estos tipos.

ComPtr

ComPtr es un tipo de puntero inteligente que representa la interfaz especificada por el parámetro de plantilla. Utilice ComPtr para declarar una variable que pueda tener acceso a los miembros de un objeto que se derive de la interfaz. ComPtr mantiene automáticamente un recuento de referencias para el puntero de la interfaz subyacente y la libera cuando el recuento de referencias llega a cero.

RuntimeClass

RuntimeClass representa una clase de la que se ha creado una instancia que hereda un conjunto de interfaces especificadas. Un objeto RuntimeClass puede proporcionar una combinación de compatibilidad para una o más interfaces COM de Windows Runtime o una referencia débil a un componente.

Módulo

Module representa una colección de objetos relacionados. Un objeto Module administra los generadores de clases, que crean objetos, y el registro, que habilita otras aplicaciones para utilizar un objeto.

Devolución de llamada

La función Callback crea un objeto cuya función miembro es un controlador de eventos (un método de devolución de llamada). Utilice la función Callback para escribir operaciones asincrónicas.

EventSource

EventSource se utiliza para administrar los controladores de eventos delegados . Utilice la biblioteca de plantillas de Windows Runtime C++ para implementar un delegado y EventSource para agregar, quitar o invocar a delegados.

AsyncBase

AsyncBase proporciona métodos virtuales que representan el modelo de programación asincrónico de Windows Runtime. Invalide los miembros de esta clase para crear una clase personalizada que pueda iniciar, detener o comprobar el progreso de una operación asincrónica.

FtmBase

FtmBase representa un objeto de cálculo de referencias con subprocesamiento libre. FtmBase crea una tabla de interfaz global (GIT) y ayuda a administrar los objetos proxy y de cálculo de referencias.

WeakRef

WeakRef es un tipo puntero inteligente que representa una referencia débily que hace referencia a un objeto al que se puede obtener o no acceso. Los objetos WeakRef solo los puede usar Windows Runtime, no los componentes COM clásicos.

Un objeto WeakRef normalmente representa un objeto cuya existencia se controla mediante una aplicación o un subproceso externo. Por ejemplo, un objeto WeakRef puede hacer referencia a un objeto de archivo. Cuando se abre el archivo, WeakRef es válido y se puede tener acceso al archivo de referencia. Pero cuando se cierra el archivo, WeakRef no es válido y no se tiene acceso al archivo.

API clave por categoría
Resalta los principales tipos, funciones y macros de la biblioteca de plantillas de Windows Runtime C++.

Referencia
Contiene información de referencia para la biblioteca de plantillas de Windows Runtime C++.

Referencia rápida (C++/CX)
Describe brevemente las características de C++/CX que admiten Windows Runtime.

Uso de componentes de Windows Runtime en Visual C++
Muestra cómo usar C++/CX para crear un componente básico de Windows Runtime.