Introducción a C++/WinRTIntroduction to 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.C++/WinRT is an entirely standard modern C++17 language projection for Windows Runtime (WinRT) APIs, implemented as a header-file-based library, and designed to provide you with first-class access to the modern Windows API. Con C++/WinRT, puedes crear y consumir API de Windows Runtime mediante cualquier compilador de C++17 compatible con estándares.With C++/WinRT, you can author and consume Windows Runtime APIs using any standards-compliant C++17 compiler. Windows SDK incluye C++/WinRT; se introdujo en la versión 10.0.17134.0 (Windows 10, versión 1803).The Windows SDK includes C++/WinRT; it was introduced in version 10.0.17134.0 (Windows 10, version 1803).

C++/WinRT es la sustitución recomendada de Microsoft para la proyección de lenguaje C++/CX y la Biblioteca de plantillas de Windows Runtime C++ (WRL).C++/WinRT is Microsoft's recommended replacement for the C++/CX language projection, and the Windows Runtime C++ Template Library (WRL). En la lista completa de temas sobre C++/WinRT se incluye información sobre la interoperabilidad y la portabilidad de C++/CX y WRL.The full list of topics about C++/WinRT includes info about both interoperating with, and porting from, C++/CX and WRL.

Importante

Algunas de las partes más importantes de C++/WinRT que se deben tener en cuenta se describen en las secciones Compatibilidad del SDK con C++/WinRT y Compatibilidad de Visual Studio con C++/WinRT, XAML, la extensión VSIX y el paquete NuGet.Some of the most important pieces of C++/WinRT to be aware of are described in the sections SDK support for C++/WinRT and Visual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package.

Proyecciones de lenguajeLanguage projections

Windows Runtime se basa en las API del Modelo de objetos componentes (COM) y se ha diseñado para acceder a él a través de proyecciones de lenguaje.The Windows Runtime is based on Component Object Model (COM) APIs, and it's designed to be accessed through language projections. Una proyección oculta los detalles del COM y proporciona una experiencia de programación más natural para un lenguaje determinado.A projection hides the COM details, and provides a more natural programming experience for a given language.

Proyección de lenguaje C++/WinRT en el contenido de referencia de las API de Windows RuntimeThe C++/WinRT language projection in the Windows Runtime API reference content

Cuando vayas a las API de Windows Runtime, haz clic en el cuadro combinado Lenguaje en la esquina superior derecha y selecciona C++/WinRT para ver los bloques de sintaxis de API tal y como aparecen en la proyección de lenguaje C++/WinRT.When you're browsing Windows Runtime APIs, click the Language combo box in the upper right, and select C++/WinRT to view API syntax blocks as they appear in the C++/WinRT language projection.

Compatibilidad de Visual Studio con C++/WinRT, XAML, la extensión VSIX y el paquete NuGetVisual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package

Para obtener compatibilidad con Visual Studio, necesitarás Visual Studio 2019 o Visual Studio 2017 (como mínimo la versión 15.6, pero se recomienda la 15.7).For Visual Studio support, you'll need Visual Studio 2019 or Visual Studio 2017 (at least version 15.6; we recommend at least 15.7). Desde el instalador de Visual Studio, instala la carga de trabajo Desarrollo con la Plataforma universal de Windows.From within the Visual Studio Installer, install the Universal Windows Platform Development workload. En Detalles de la instalación > Desarrollo de la Plataforma universal de Windows, marca las opciones de las herramientas de la Plataforma universal de Windows de C++ (v14x) , si aún no lo has hecho.In Installation Details > Universal Windows Platform development, check the C++ (v14x) Universal Windows Platform tools option(s), if you haven't already done so. Además, en Windows, en Configuración > Actualización y seguridad > Para desarrolladores, selecciona la opción Modo de programador en lugar de Efectuar instalación de prueba de aplicaciones.And, in Windows Settings > Update & Security > For developers, choose the Developer mode option rather than the Sideload apps option.

Aunque se recomienda que realices el desarrollo con las versiones más recientes de Visual Studio y Windows SDK, si usas una versión de C++/WinRT incluida con Windows SDK anterior a 10.0.17763.0 (Windows 10, versión 1809), para usar los encabezados de los espacios de nombres de Windows mencionados anteriormente, necesitarás en el proyecto una versión de destino de Windows SDK como mínimo 10.0.17134.0 (Windows 10, versión 1803).While we recommend that you develop with the latest versions of Visual Studio and the Windows SDK, if you're using a version of C++/WinRT that shipped with the Windows SDK prior to 10.0.17763.0 (Windows 10, version 1809), then, to use the the Windows namespaces headers mentioned above, you'll need a minimum Windows SDK target version in your project of 10.0.17134.0 (Windows 10, version 1803).

Te conviene descargar e instalar la versión más reciente de la Extensión de Visual Studio (VSIX) de C++/WinRT desde Visual Studio Marketplace.You'll want to download and install the latest version of the C++/WinRT Visual Studio Extension (VSIX) from the Visual Studio Marketplace.

  • La extensión VSIX incluye plantillas de proyecto y elemento de C++/WinRT en Visual Studio, por lo que puedes empezar a trabajar en el desarrollo de C++/WinRT.The VSIX extension gives you C++/WinRT project and item templates in Visual Studio, so that you can get started with C++/WinRT development.
  • Además, ofrece visualización de depuración nativa de Visual Studio (natvis) de tipos proyectados de C++/ WinRT, con lo que proporciona una experiencia similar a la depuración de C#.In addition, it gives you Visual Studio native debug visualization (natvis) of C++/WinRT projected types; providing an experience similar to C# debugging. Natvis es automático para compilaciones de depuración.Natvis is automatic for debug builds. Puedes participar en el lanzamiento de versiones si defines el símbolo WINRT_NATVIS.You can opt into it release builds by defining the symbol WINRT_NATVIS.

Las plantillas de proyecto de Visual Studio para C++/WinRT se describen en las secciones siguientes.The Visual Studio project templates for C++/WinRT are described in the sections below. Cuando se crea un proyecto de C++/WinRT con la versión más reciente de la extensión VSIX instalada, el nuevo proyecto de C++/WinRT instala automáticamente el paquete NuGet Microsoft.Windows.CppWinRT.When you create a new C++/WinRT project with the latest version of the VSIX extension installed, the new C++/WinRT project automatically installs the Microsoft.Windows.CppWinRT NuGet package. El paquete NuGet Microsoft.Windows.CppWinRT ofrece compatibilidad con la compilación de C++/WinRT (propiedades y destinos de MSBuild), lo que permite que el proyecto sea portátil entre una máquina de desarrollo y un agente de compilación (en el que solo está instalado el paquete NuGet, y no la extensión de VSIX).The Microsoft.Windows.CppWinRT NuGet package provides C++/WinRT build support (MSBuild properties and targets), making your project portable between a development machine and a build agent (on which only the NuGet package, and not the VSIX extension, is installed).

También puedes convertir un proyecto existente si instalas manualmente el paquete NuGet Microsoft.Windows.CppWinRT.Alternatively, you can convert an existing project by manually installing the Microsoft.Windows.CppWinRT NuGet package. Después de instalar la versión más reciente de la extensión VSIX (o de actualizar a esta), abre el proyecto existente en Visual Studio, haz clic en Proyecto > Administrar paquetes NuGet… > Busca, escribe o pega Microsoft.Windows.CppWinRT en el cuadro de búsqueda, selecciona el elemento en los resultados de la búsqueda y haz clic en Instalar para instalar el paquete de ese proyecto.After installing (or updating to) the latest version of the VSIX extension, open the existing project in Visual Studio, click Project > Manage NuGet Packages... > Browse, type or paste Microsoft.Windows.CppWinRT in the search box, select the item in search results, and then click Install to install the package for that project. Una vez que hayas agregado el paquete, obtendrás compatibilidad de MSBuild con C++/WinRT para el proyecto, incluida la invocación de la herramienta cppwinrt.exe.Once you've added the package, you'll get C++/WinRT MSBuild support for the project, including invoking the cppwinrt.exe tool.

Importante

Si tienes proyectos creados con una versión de la extensión VSIX anterior a 1.0.190128.4 (o actualizados para funcionar con esta), consulta Versiones anteriores de la extensión VSIX.If you have projects that were created with (or upgraded to work with) a version of the VSIX extension earlier than 1.0.190128.4, then see Earlier versions of the VSIX extension. En esta sección encontrarás información importante sobre la configuración de los proyectos que necesitarás conocer a fin de actualizarlos para usar la versión más reciente de la extensión VSIX.That section contains important info about the configuration of your projects, which you'll need to know to upgrade them to use the latest version of the VSIX extension.

  • Dado que C++/WinRT usa características del estándar C++17, el paquete NuGet establece la propiedad del proyecto C/C++ > Language > C++ Language Standard > ISO C++17 Standard (/std:c++17) en Visual Studio.Because C++/WinRT uses features from the C++17 standard, the NuGet package sets project property C/C++ > Language > C++ Language Standard > ISO C++17 Standard (/std:c++17) in Visual Studio.
  • También agrega la opción del compilador /bigobj.It also adds the /bigobj compiler option.
  • Agrega la opción de compilador /await para habilitar co_await.It adds the /await compiler option in order to enable co_await.
  • Le indica al compilador XAML que emita código de C++/WinRT.It instructs the XAML compiler to emit C++/WinRT codegen.
  • También puedes establecer Modo de conformidad: Yes (/permissive-) , que limita todavía más tu código para que sea compatible con los estándares.You might also want to set Conformance mode: Yes (/permissive-), which further constrains your code to be standards-compliant.
  • Otra propiedad de proyecto que se debe tener en cuenta es C/C++ > General > Tratar advertencias como errores.Another project property to be aware of is C/C++ > General > Treat Warnings As Errors. Establece esto en Sí (/WX) o No (/WX-) según te parezca.Set this to Yes(/WX) or No (/WX-) to taste. A veces, los archivos de origen generados por la herramienta cppwinrt.exe generan advertencias hasta que les agregas tu implementación.Sometimes, source files generated by the cppwinrt.exe tool generate warnings until you add your implementation to them.

Con el sistema establecido tal como se ha descrito anteriormente, podrás crear y compilar (o abrir) un proyecto de C++/WinRT en Visual Studio e implementarlo.With your system set up as described above, you'll be able to create and build, or open, a C++/WinRT project in Visual Studio, and deploy it.

A partir de la versión 2.0, el paquete NuGet Microsoft.Windows.CppWinRT incluye la herramienta cppwinrt.exe.As of version 2.0, the Microsoft.Windows.CppWinRT NuGet package includes the cppwinrt.exe tool. Puedes apuntar la herramienta cppwinrt.exe a un archivo de metadatos de Windows Runtime (.winmd) para generar una biblioteca de C++ estándar basada en archivos de encabezado que proyecta las API descritas en los metadatos para el consumo desde código de C++/WinRT.You can point the cppwinrt.exe tool at a Windows Runtime metadata (.winmd) file to generate a header-file-based standard C++ library that projects the APIs described in the metadata for consumption from C++/WinRT code. Los archivos de metadatos de Windows Runtime (.winmd) proporcionan una forma canónica de describir una superficie de API de Windows Runtime.Windows Runtime metadata (.winmd) files provide a canonical way of describing a Windows Runtime API surface. Al apuntar cppwinrt.exe a los metadatos, puedes generar una biblioteca para usarla con cualquier clase en tiempo de ejecución implementada en un componente de Windows Runtime de terceros o segunda parte o implementado en tu propia aplicación.By pointing cppwinrt.exe at metadata, you can generate a library for use with any runtime class implemented in a second- or third-party Windows Runtime component, or implemented in your own application. Para obtener más información, consulta Consumir API con C++/WinRT.For more info, see Consume APIs with C++/WinRT.

Con C++/WinRT, también puedes implementar tus propias clases en tiempo de ejecución con C++ estándar, sin tener que recurrir a la programación de estilo COM.With C++/WinRT, you can also implement your own runtime classes using standard C++, without resorting to COM-style programming. Para una clase en tiempo de ejecución, solo tienes que describir tus tipos en un archivo IDL, y midl.exe y cppwinrt.exe generarán para ti tus archivos de código fuente de implementación reutilizable.For a runtime class, you just describe your types in an IDL file, and midl.exe and cppwinrt.exe generate your implementation boilerplate source code files for you. Como alternativa, puedes simplemente implementar interfaces si derivas de una clase base de C++/WinRT.You can alternatively just implement interfaces by deriving from a C++/WinRT base class. Para obtener más información, consulta Crear API con C++/WinRT.For more info, see Author APIs with C++/WinRT.

Para conocer una lista de opciones de personalización para la herramienta cppwinrt.exe, a través de las propiedades del proyecto, consulta readme del paquete NuGet Microsoft.Windows.CppWinRT.For a list of customization options for the cppwinrt.exe tool, set via project properties, see the Microsoft.Windows.CppWinRT NuGet package readme.

Puedes identificar que un proyecto usa compatibilidad de MSBuild con C++WinRT porque el paquete NuGet Microsoft.Windows.CppWinRT está instalado en el proyecto.You can identify a project that uses the C++/WinRT MSBuild support by the presence of the Microsoft.Windows.CppWinRT NuGet package installed within the project.

Estas son las plantillas de proyecto de Visual Studio proporcionadas por la extensión VSIX.Here are the Visual Studio project templates provided by the VSIX extension.

Aplicación vacía (C++/WinRT)Blank App (C++/WinRT)

Plantilla de proyecto para una aplicación de la Plataforma universal de Windows (UWP) que tiene una interfaz de usuario XAML.A project template for a Universal Windows Platform (UWP) app that has a XAML user-interface.

Visual Studio proporciona compatibilidad con el compilador XAML para generar los códigos auxiliares de los encabezados y las implementaciones a partir del archivo basado en lenguaje de definición de interfaz (IDL) (.idl) que se encuentra detrás de cada archivo de marcado XAML.Visual Studio provides XAML compiler support to generate implementation and header stubs from the Interface Definition Language (IDL) (.idl) file that sits behind each XAML markup file. En un archivo IDL, define las clases en tiempo de ejecución locales a las que quieras hacer referencia en las páginas XAML de tu aplicación y, después, compila el proyecto una sola vez para generar las plantillas de implementación en Generated Files y las definiciones del tipo de código auxiliar en Generated Files\sources.In an IDL file, define any local runtime classes that you want to reference in your app's XAML pages, and then build the project once to generate implementation templates in Generated Files, and stub type definitions in Generated Files\sources. Luego, usa estas definiciones de subtipo de código auxiliar como referencia para implementar tus clases en tiempo de ejecución locales.Then use those stub type definitions for reference to implement your local runtime classes. Consulta Factorizar clases en tiempo de ejecución en archivos Midl (.idl).See Factoring runtime classes into Midl files (.idl).

La compatibilidad de la superficie de diseño XAML en Visual Studio 2019 con C++/WinRT es casi igual a la de C#.The XAML design surface support in Visual Studio 2019 for C++/WinRT is close to parity with C#. En Visual Studio 2019, puedes usar la pestaña Eventos de la ventana Propiedades para agregar controladores de eventos en un proyecto de C++/WinRT.In Visual Studio 2019, you can use the Events tab of the Properties window to add event handlers within a C++/WinRT project. También puedes agregar controladores de eventos en el código manualmente. Consulta Controlar eventos usando delegados en C++/WinRT para obtener más información.You can also add event handlers to your code manually—see Handle events by using delegates in C++/WinRT for more info.

Aplicación principal (C++/WinRT)Core App (C++/WinRT)

Plantilla de proyecto para una aplicación de la Plataforma universal de Windows (UWP) que no usa XAML.A project template for a Universal Windows Platform (UWP) app that doesn't use XAML.

En su lugar, usa el encabezado del espacio de nombres de Windows de C++/WinRT para el espacio de nombres Windows.ApplicationModel.Core.Instead, it uses the C++/WinRT Windows namespace header for the Windows.ApplicationModel.Core namespace. Después de compilar y ejecutar, haz clic en un espacio vacío para agregar un cuadrado de color; luego, haz clic en un cuadrado de color para arrastrarlo.After building and running, click on an empty space to add a colored square; then click on a colored square to drag it.

Aplicación de consola de Windows (C++/WinRT)Windows Console Application (C++/WinRT)

Plantilla de proyecto para una aplicación cliente C+/WinRT para escritorio de Windows, con una interfaz de usuario de consola.A project template for a C++/WinRT client application for Windows Desktop, with a console user-interface.

Aplicación de escritorio de Windows (C++/WinRT)Windows Desktop Application (C++/WinRT)

Plantilla de proyecto para una aplicación cliente C++/WinRT para escritorio de Windows, que muestra una clase Windows.Foundation.Uri de Windows Runtime en un MessageBox de Win32.A project template for a C++/WinRT client application for Windows Desktop, which displays a Windows Runtime Windows.Foundation.Uri inside a Win32 MessageBox.

Componente de Windows Runtime (C++/WinRT)Windows Runtime Component (C++/WinRT)

Plantilla de proyecto para un componente, normalmente para el consumo desde una Plataforma universal de Windows (UWP).A project template for a component; typically for consumption from a Universal Windows Platform (UWP).

Esta plantilla muestra la cadena de herramientas midl.exe > cppwinrt.exe, donde se generan los metadatos de Windows Runtime (.winmd) a partir de IDL y, después, se generan los códigos auxiliares de los encabezados y las implementaciones a partir de los metadatos de Windows Runtime.This template demonstrates the midl.exe > cppwinrt.exe toolchain, where Windows Runtime metadata (.winmd) is generated from IDL, and then implementation and header stubs are generated from the Windows Runtime metadata.

En un archivo IDL, define las clases en tiempo de ejecución de tu componente, su interfaz predeterminada y cualquier otra interfaz que implementen.In an IDL file, define the runtime classes in your component, their default interface, and any other interfaces they implement. Compila el proyecto una sola vez para generar module.g.cpp, module.h.cpp, plantillas de implementación en Generated Files y la definición del tipo de código auxiliar en Generated Files\sources.Build the project once to generate module.g.cpp, module.h.cpp, implementation templates in Generated Files, and stub type definitions in Generated Files\sources. Luego, usa estas definiciones del tipo de código auxiliar como referencia para implementar las clases en tiempo de ejecución en tu componente.Then use those the stub type definitions for reference to implement the runtime classes in your component. Consulta Factorizar clases en tiempo de ejecución en archivos Midl (.idl).See Factoring runtime classes into Midl files (.idl).

Agrupa el binario compilado de componente de Windows Runtime y su .winmd con la aplicación para UWP que los consume.Bundle the built Windows Runtime component binary and its .winmd with the UWP app consuming them.

Versiones anteriores de la extensión VSIXEarlier versions of the VSIX extension

Te recomendamos que instales la versión más reciente de la extensión VSIX (o que actualices a esta).We recommend that you install (or update to) the latest version of the VSIX extension. Está configurada de forma predeterminada para actualizarse automáticamente.It is configured to update itself by default. Si lo haces y tienes proyectos creados con una versión de la extensión VSIX anterior a 1.0.190128.4, encontrarás en esta sección información importante sobre cómo actualizar esos proyectos para que funcionen con la nueva versión.If you do that, and you have projects that were created with a version of the VSIX extension earlier than 1.0.190128.4, then this section contains important info about upgrading those projects to work with the new version. Aunque no lleves a cabo la actualización, la información de esta sección te resultará útil.If you don't update, then you'll still find the info in this section useful.

En lo que respecta a las versiones admitidas de Windows SDK y Visual Studio, así como a la configuración de Visual Studio, la información contenida en la sección anterior (Compatibilidad de Visual Studio con C++/WinRT, XAML, la extensión VSIX y el paquete NuGet) se aplica a versiones anteriores de la extensión VSIX.In terms of supported Windows SDK and Visual Studio versions, and Visual Studio configuration, the info in the Visual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package section above applies to earlier versions of the VSIX extension. La información siguiente describe diferencias importantes relacionadas con el comportamiento y la configuración de proyectos creados con anteriores versiones (o actualizados para funcionar con estas).The info below describes important differences regarding the behavior and configuration of projects created with (or upgraded to work with) earlier versions.

Proyectos creados con una versión anterior a 1.0.181002.2Created earlier than 1.0.181002.2

Si el proyecto se creó con una versión de la extensión VSIX anterior a 1.0.181002.2, la compatibilidad con la compilación de C++/WinRT está integrada en esa versión de la extensión VSIX.If your project was created with a version of the VSIX extension earlier than 1.0.181002.2, then C++/WinRT build support was built into that version of the VSIX extension. El proyecto tiene la propiedad <CppWinRTEnabled>true</CppWinRTEnabled> establecida en el archivo .vcxproj.Your project has the <CppWinRTEnabled>true</CppWinRTEnabled> property set in the .vcxproj file.

<Project ...>
    <PropertyGroup Label="Globals">
        <CppWinRTEnabled>true</CppWinRTEnabled>
...

Puedes actualizar el proyecto si instalas manualmente el paquete NuGet Microsoft.Windows.CppWinRT.You can upgrade your project by manually installing the Microsoft.Windows.CppWinRT NuGet package. Después de instalar la versión más reciente de la extensión VSIX (o de actualizar a esta), abre el proyecto en Visual Studio, haz clic en Proyecto > Administrar paquetes NuGet… > Examinar, escribe o pega Microsoft.Windows.CppWinRT en el cuadro de búsqueda, selecciona el elemento en los resultados de la búsqueda y haz clic en Instalar para instalar el paquete del proyecto.After installing (or upgrading to) the latest version of the VSIX extension, open your project in Visual Studio, click Project > Manage NuGet Packages... > Browse, type or paste Microsoft.Windows.CppWinRT in the search box, select the item in search results, and then click Install to install the package for your project.

Proyectos creados con una versión entre 1.0.181002.2 y 1.0.190128.3 (o actualizados a estas)Created with (or upgraded to) between 1.0.181002.2 and 1.0.190128.3

Si el proyecto se creó con una versión de la extensión VSIX entre 1.0.181002.2 y 1.0.190128.3 (ambas incluidas), la plantilla de proyecto instaló automáticamente el paquete NuGet Microsoft.Windows.CppWinRT en el proyecto.If your project was created with a version of the VSIX extension between 1.0.181002.2 and 1.0.190128.3, inclusive, then the Microsoft.Windows.CppWinRT NuGet package was installed in the project automatically by the project template. También es posible que hayas actualizado un proyecto anterior para usar una versión de la extensión VSIX de este intervalo.You might also have upgraded an older project to use a version of the VSIX extension in this range. Si lo hiciste, dado que la compatibilidad con la compilación también estaba presente en las versiones de la extensión VSIX de este intervalo, el proyecto actualizado podría tener instalado el paquete NuGet Microsoft.Windows.CppWinRT.If you did, then—since build support was also still present in versions of the VSIX extension in this range—your upgraded project may or may not have the Microsoft.Windows.CppWinRT NuGet package installed.

Para actualizar el proyecto, sigue las instrucciones de la sección anterior y asegúrate de que el proyecto tenga instalado el paquete NuGet Microsoft.Windows.CppWinRT.To upgrade your project, follow the instructions in the previous section and ensure that your project does have the Microsoft.Windows.CppWinRT NuGet package installed.

Configuraciones de actualización no válidasInvalid upgrade configurations

Con la versión más reciente de la extensión VSIX, no es válido que un proyecto tenga la propiedad <CppWinRTEnabled>true</CppWinRTEnabled> si no tiene instalado también el paquete NuGet Microsoft.Windows.CppWinRT.With the latest version of the VSIX extension, it's not valid for a project to have the <CppWinRTEnabled>true</CppWinRTEnabled> property if it doesn't also have the Microsoft.Windows.CppWinRT NuGet package installed. Un proyecto con esta configuración genera el siguiente mensaje de error de compilación: "The C++/WinRT VSIX no longer provides project build support.A project with this configuration produces the build error message, "The C++/WinRT VSIX no longer provides project build support. Please add a project reference to the Microsoft.Windows.CppWinRT Nuget package" (VSIX de C++WinRT ya no proporciona compatibilidad con la compilación del proyecto. Agregue una referencia de proyecto al paquete Microsoft.Windows.CppWinRT Nuget).Please add a project reference to the Microsoft.Windows.CppWinRT Nuget package."

Como se mencionó anteriormente, ahora los proyectos C++/WinRT deben tener instalado el paquete NuGet.As mentioned above, a C++/WinRT project now needs to have the NuGet package installed in it.

Puesto que el elemento <CppWinRTEnabled> ahora está obsoleto, puedes editar .vcxproj y eliminar el elemento.Since the <CppWinRTEnabled> element is now obsolete, you can optionally edit your .vcxproj, and delete the element. No es estrictamente necesario, pero es una opción.It's not strictly necessary, but it's an option.

Además, si .vcxproj contiene <RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles>, puedes quitarlo para compilar sin que esté instalada la extensión VSIX de C++/WinRT.Also, if your .vcxproj contains <RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles>, then you can remove it so that you can build without requiring the C++/WinRT VSIX extension to be installed.

Compatibilidad del SDK con C++/WinRTSDK support for C++/WinRT

Aunque solo está presente por motivos de compatibilidad, a partir de la versión 10.0.17134.0 (Windows 10, versión 1803), Windows SDK contiene una biblioteca de C++ estándar basada en archivos de encabezado para el uso de API de Windows propias (API de Windows Runtime en espacios de nombres de Windows).Although it is now present only for compatibility reasons, as of version 10.0.17134.0 (Windows 10, version 1803), the Windows SDK contains a header-file-based standard C++ library for consuming first-party Windows APIs (Windows Runtime APIs in Windows namespaces). Estos encabezados se encuentran en la carpeta %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt.Those headers are inside the folder %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt. A partir de Windows SDK versión 10.0.17763.0 (Windows 10, versión 1809), estos encabezados se generan automáticamente en la carpeta $(GeneratedFilesDir) del proyecto.As of the Windows SDK version 10.0.17763.0 (Windows 10, version 1809), these headers are generated for you inside your project's $(GeneratedFilesDir) folder.

También por motivos de compatibilidad, Windows SDK incluye la herramienta cppwinrt.exe.Again for compatibility, the Windows SDK also comes with the cppwinrt.exe tool. Aun así, recomendamos que en su lugar instales y uses la versión más reciente de cppwinrt.exe, que se incluye con el paquete NuGet Microsoft.Windows.CppWinRT.However, we recommend that you instead install and use the most recent version of cppwinrt.exe, which is included with the Microsoft.Windows.CppWinRT NuGet package. Ese paquete y cppwinrt.exe se describen en las secciones anteriores.That package, and cppwinrt.exe, are described in the sections above.

Tipos personalizados en la proyección C++/WinRTCustom types in the C++/WinRT projection

En tu programación de C++/WinRT, puedes usar características del lenguaje C++ estándar y tipos de datos C++ estándar y C++/WinRT, incluidos algunos tipos de datos de la biblioteca estándar de C++.In your C++/WinRT programming, you can use standard C++ language features and Standard C++ data types and C++/WinRT—including some C++ Standard Library data types. Pero también descubrirás algunos tipos de datos personalizados en la proyección y podrás optar por usarlos.But you'll also become aware of some custom data types in the projection, and you can choose to use them. Por ejemplo, usamos winrt::hstring en el ejemplo de código de inicio rápido de Introducción a C++/WinRT.For example, we use winrt::hstring in the quick-start code example in Get started with C++/WinRT.

winrt::com_array es otro tipo que probablemente uses en algún momento,winrt::com_array is another type that you're likely to use at some point. pero es menos probable que uses directamente un tipo como winrt::array_view.But you're less likely to directly use a type such as winrt::array_view. También puedes optar por no usarlo para no tener ningún código que cambiar si aparece un tipo equivalente en la biblioteca estándar de C++.Or you may choose not to use it so that you won't have any code to change if and when an equivalent type appears in the C++ Standard Library.

Advertencia

Además, hay tipos que probablemente verás si estudias detenidamente los encabezados del espacio de nombres de Windows de C++/WinRT.There are also types that you might see if you closely study the C++/WinRT Windows namespace headers. Un ejemplo es winrt::param::hstring, pero hay también ejemplos de colección.An example is winrt::param::hstring, but there are collection examples too. Estos existen solamente para optimizar el enlace de parámetros de entrada. Además, producen grandes mejoras de rendimiento y hacen que la mayoría de los patrones de llamada "solo funcionen" con contenedores y tipos de C++ estándar relacionados.These exist solely to optimize the binding of input parameters, and they yield big performance improvements and make most calling patterns "just work" for related standard C++ types and containers. La proyección solo usa estos tipos en los casos en los que agregan un mayor valor.These types are only ever used by the projection in cases where they add most value. Están muy optimizados y no están destinados a un uso general, por lo que no debes intentar usarlos.They're highly optimized and they're not for general use; don't be tempted to use them yourself. Tampoco debes usar nada del espacio de nombres winrt::impl, puesto que son tipos de implementación y, por tanto, están sujetos a cambios.Nor should you use anything from the winrt::impl namespace, since those are implementation types, and therefore subject to change. Debes seguir usando los tipos estándar o los tipos del espacio de nombres winrt.You should continue to use standard types, or types from the winrt namespace.

Consulta también Pasar parámetros a los límites de la ABI.Also see Passing parameters into the ABI boundary.

API importantesImportant APIs