Introduction à C++/WinRTIntroduction to C++/WinRT

 

 

C++/WinRT est une projection de langage C++17 moderne entièrement standard pour les API Windows Runtime (WinRT), implémentée en tant que bibliothèque basée sur un fichier d’en-tête et conçue pour vous fournir un accès de première classe à l’API Windows moderne.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. Avec C++/WinRT, vous pouvez créer et utiliser des API Windows Runtime en employant n’importe quel compilateur C++17 conforme aux normes.With C++/WinRT, you can author and consume Windows Runtime APIs using any standards-compliant C++17 compiler. Le SDK Windows inclut C++/WinRT. Il a été introduit dans la version 10.0.17134.0 (Windows 10, version 1803).The Windows SDK includes C++/WinRT; it was introduced in version 10.0.17134.0 (Windows 10, version 1803).

C++/WinRT constitue le remplacement recommandé par Microsoft pour la projection de langage C++/CX et la bibliothèque de modèles C++ Windows Runtime (WRL).C++/WinRT is Microsoft's recommended replacement for the C++/CX language projection, and the Windows Runtime C++ Template Library (WRL). La liste complète des rubriques sur C++/WinRT comprend des informations sur l’interaction avec C++/CX et WRL et le portage à partir de ces langages.The full list of topics about C++/WinRT includes info about both interoperating with, and porting from, C++/CX and WRL.

Important

Certains des éléments les plus importants de C++/WinRT à connaître sont décrits dans les sections Prise en charge du SDK pour C++/WinRT et Prise en charge Visual Studio pour C++/WinRT, XAML, l’extension VSIX et le package 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.

Consultez également Où trouver des exemples d’applications C++/WinRT ?.Also see Where can I find C++/WinRT sample apps?.

Projections de langageLanguage projections

Windows Runtime est basé sur les API COM (Component Object Model) et est conçu pour être accessible par le biais de projections de langage.The Windows Runtime is based on Component Object Model (COM) APIs, and it's designed to be accessed through language projections. Une projection masque les détails COM et fournit une expérience de programmation plus naturelle pour un langage donné.A projection hides the COM details, and provides a more natural programming experience for a given language.

La projection de langage C++/WinRT dans le contenu de référence des API Windows Runtime WindowsThe C++/WinRT language projection in the Windows Runtime API reference content

Quand vous naviguez dans des API Windows Runtime, cliquez sur la zone de liste Langage en haut à droite, puis sélectionnez C++/WinRT pour afficher les blocs de syntaxe d’API tels qu’ils apparaissent dans la projection de langage 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.

Prise en charge Visual Studio pour C++/WinRT, XAML, l’extension VSIX et le package NuGetVisual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package

Pour la prise en charge Visual Studio, vous aurez besoin de Visual Studio 2019 ou de Visual Studio 2017 (au moins la version 15.6 ; nous recommandons au moins la version 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). À partir de Visual Studio Installer, installez la charge de travail Développement pour la plateforme Windows universelle.From within the Visual Studio Installer, install the Universal Windows Platform development workload. Dans Détails de l’installation > Développement pour la plateforme Windows universelle, cochez la ou les options des Outils de plateforme Windows universelle C++ (v14x) , si vous ne l’avez pas déjà fait.In Installation Details > Universal Windows Platform development, check the C++ (v14x) Universal Windows Platform tools option(s), if you haven't already done so. Et, dans Paramètres Windows > Mise à jour et &Sécurité > Pour les développeurs, choisissez l’option Mode développeur plutôt que l’option Charger la version des applications de façon indépendante.And, in Windows Settings > Update & Security > For developers, choose the Developer mode option rather than the Sideload apps option.

Nous vous recommandons de développer à l’aide des dernières versions de Visual Studio et du SDK Windows. Toutefois, si vous utilisez une version de C++/WinRT fournie avec le SDK Windows antérieure à 10.0.17763.0 (Windows 10, version 1809), pour utiliser les en-têtes d’espace de noms Windows mentionnés ci-dessus, vous aurez besoin de la version cible minimale 10.0.17134.0 du SDK Windows (Windows 10, version 1803) dans votre projet.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).

Vous allez télécharger et installer la dernière version de l’ extension Visual Studio (VSIX) C++/WinRT à partir de 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.

  • L’extension VSIX vous fournit des modèles de projet et d’élément C++/WinRT dans Visual Studio pour vous permettre de commencer avec le développement 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.
  • De plus, elle vous offre une visualisation du débogage en mode natif (natvis) Visual Studio des types projetés C++/WinRT, fournissant une expérience semblable au débogage 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 est automatique pour les builds Debug.Natvis is automatic for debug builds. Vous pouvez le choisir dans les builds Release en définissant le symbole WINRT_NATVIS.You can opt into it release builds by defining the symbol WINRT_NATVIS.

Les modèles de projet Visual Studio pour C++/WinRT sont décrits dans les sections ci-dessous.The Visual Studio project templates for C++/WinRT are described in the sections below. Quand vous créez un projet C++/WinRT avec la dernière version installée de l’extension VSIX, le nouveau projet C++/WinRT installe automatiquement le package 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. Le package NuGet Microsoft.Windows.CppWinRT fournit une prise en charge de build C++/WinRT (propriétés et cibles MSBuild), rendant votre projet portable entre un ordinateur de développement et un agent de build (sur lequel seul le package NuGet package est installé, et pas l’extension 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).

Vous pouvez aussi convertir un projet existant en installant manuellement le package NuGet Microsoft.Windows.CppWinRT.Alternatively, you can convert an existing project by manually installing the Microsoft.Windows.CppWinRT NuGet package. Après l’installation de la dernière version de l’extension VSIX (ou une mise à jour vers cette version), ouvrez le projet existant dans Visual Studio, cliquez sur Projet > Gérer les packages NuGet... > Parcourir, tapez ou collez Microsoft.Windows.CppWinRT dans la zone de recherche, sélectionnez l’élément dans les résultats de la recherche, puis cliquez sur Installer pour installer le package correspondant à ce projet.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. Une fois que vous avez ajouté le package, vous recevrez la prise en charge MSBuild C++/WinRT pour le projet, incluant l’appel de l’outil cppwinrt.exe.Once you've added the package, you'll get C++/WinRT MSBuild support for the project, including invoking the cppwinrt.exe tool.

Important

Si vous avez des projets qui ont été créés avec une version de l’extension VSIX antérieure à 1.0.190128.4 (ou mis à niveau pour fonctionner avec une telle version), consultez Versions antérieures de l’extension 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. Cette section contient des informations importantes sur la configuration de vos projets. Elles vous seront utiles pour mettre à niveau ces derniers afin d’utiliser la dernière version de l’extension 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.

  • Étant donné que C++/WinRT utilise les fonctionnalités de la norme C++17, le package NuGet définit la propriété de projet C/C++ > Langage > Norme du langage C++ > Norme ISO C++17 (/std:c++17) dans 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.
  • Il ajoute également l’option de compilateur /bigobj.It also adds the /bigobj compiler option.
  • Il ajoute l’option de compilateur /await pour activer co_await.It adds the /await compiler option in order to enable co_await.
  • Il indique au compilateur XAML d’émettre le codegen C++/WinRT.It instructs the XAML compiler to emit C++/WinRT codegen.
  • Vous souhaiterez peut-être également définir Mode de conformité : Oui (/permissive-) , ce qui contraint davantage votre code à être conforme aux normes.You might also want to set Conformance mode: Yes (/permissive-), which further constrains your code to be standards-compliant.
  • Il y a une autre propriété de projet à connaître : C/C++ > Général > Considérer les avertissements comme des erreurs.Another project property to be aware of is C/C++ > General > Treat Warnings As Errors. Définissez-la sur Oui (/WX) ou Non (/WX-) , à votre convenance.Set this to Yes(/WX) or No (/WX-) to taste. Parfois, les fichiers sources générés par l’outil cppwinrt.exe génèrent des avertissements jusqu’à ce que vous leur ajoutiez votre implémentation.Sometimes, source files generated by the cppwinrt.exe tool generate warnings until you add your implementation to them.

Avec votre système défini comme décrit ci-dessus, vous pourrez créer et générer, ou ouvrir, un projet C++/WinRT dans Visual Studio, et le déployer.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.

À compter de la version 2.0, le package NuGet Microsoft.Windows.CppWinRT inclut l’outil cppwinrt.exe.As of version 2.0, the Microsoft.Windows.CppWinRT NuGet package includes the cppwinrt.exe tool. Vous pouvez pointer l’outil cppwinrt.exe sur un fichier de métadonnées Windows Runtime (.winmd) pour générer une bibliothèque C++ standard basée sur un fichier d’en-tête qui projette les API décrites dans les métadonnées pour une consommation à partir du code 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. Les fichiers de métadonnées Windows Runtime (.winmd) fournissent un moyen canonique de décrire une surface d’API Windows Runtime.Windows Runtime metadata (.winmd) files provide a canonical way of describing a Windows Runtime API surface. En pointant cppwinrt.exe vers des métadonnées, vous pouvez générer une bibliothèque à utiliser avec n’importe quelle classe runtime implémentée dans un composant Windows Runtime secondaire ou tiers ou implémentée dans votre propre application.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. Pour plus d’informations, consultez Utiliser des API avec C++/WinRT.For more info, see Consume APIs with C++/WinRT.

Avec C++/WinRT, vous pouvez également implémenter vos propres classes runtime en utilisant du code C++ standard, sans avoir recours à une programmation de style COM.With C++/WinRT, you can also implement your own runtime classes using standard C++, without resorting to COM-style programming. Pour une classe runtime, vous décrivez seulement vos types dans un fichier IDL. midl.exe et cppwinrt.exe génèrent alors automatiquement vos fichiers de code source de modèle d’implémentation.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. Vous pouvez également implémenter simplement des interfaces en dérivant d’une classe de base C++/WinRT.You can alternatively just implement interfaces by deriving from a C++/WinRT base class. Pour plus d’informations, consultez Créer des API avec C++/WinRT.For more info, see Author APIs with C++/WinRT.

Pour obtenir la liste des options de personnalisation pour l’outil cppwinrt.exe qui est défini via les propriétés de projet, consultez le fichier Lisez-moi du package 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.

Vous pouvez identifier un projet qui utilise la prise en charge MSBuild C++/WinRT par la présence du package NuGet Microsoft.Windows.CppWinRT installé dans le projet.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.

Voici les modèles de projet Visual Studio fournis par l’extension VSIX.Here are the Visual Studio project templates provided by the VSIX extension.

Application vide (C++/WinRT)Blank App (C++/WinRT)

Modèle de projet pour une application de plateforme Windows universelle (UWP) qui possède une interface utilisateur XAML.A project template for a Universal Windows Platform (UWP) app that has a XAML user-interface.

Visual Studio fournit la prise en charge du compilateur XAML pour générer des stubs d’implémentation et d’en-tête à partir du fichier IDL (Interface Definition Language) (.idl) qui se trouve derrière chaque fichier de balisage 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. Dans un fichier IDL, définissez toutes les classes runtime locales que vous souhaitez référencer dans les pages XAML de votre application, puis générez une fois le projet pour générer les modèles d’implémentation dans Generated Files et les définitions de type de stub dans 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. Utilisez ensuite les définitions de type de stub comme référence pour implémenter vos classes runtime locales.Then use those stub type definitions for reference to implement your local runtime classes. Consultez Factorisation des classes runtime dans des fichiers Midl (.idl).See Factoring runtime classes into Midl files (.idl).

La prise en charge de l’aire de conception XAML dans Visual Studio 2019 pour C++/WinRT est proche de la parité avec C#.The XAML design surface support in Visual Studio 2019 for C++/WinRT is close to parity with C#. Dans Visual Studio 2019, vous pouvez utiliser l’onglet Événements de la fenêtre Propriétés pour ajouter des gestionnaires d’événements dans un projet 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. Vous pouvez également ajouter manuellement des gestionnaires d’événements à votre code. Pour plus d’informations, consultez Gérer des événements en utilisant des délégués en C++/WinRT.You can also add event handlers to your code manually—see Handle events by using delegates in C++/WinRT for more info.

Application Core (C++/WinRT)Core App (C++/WinRT)

Modèle de projet pour une application de plateforme Windows universelle (UWP) qui n’utilise pas XAML.A project template for a Universal Windows Platform (UWP) app that doesn't use XAML.

À la place, elle utilise l’en-tête d’espace de nom Windows C++/WinRT pour l’espace de noms Windows.ApplicationModel.Core.Instead, it uses the C++/WinRT Windows namespace header for the Windows.ApplicationModel.Core namespace. Après la génération et l’exécution, cliquez sur un espace vide pour ajouter un carré coloré ; cliquez ensuite sur un carré coloré pour le faire glisser.After building and running, click on an empty space to add a colored square; then click on a colored square to drag it.

Application console Windows (C++/WinRT)Windows Console Application (C++/WinRT)

Modèle de projet pour une application cliente C+/WinRT pour Windows Desktop, avec une interface utilisateur de console.A project template for a C++/WinRT client application for Windows Desktop, with a console user-interface.

Application Windows Desktop (C++/WinRT)Windows Desktop Application (C++/WinRT)

Modèle de projet pour une application cliente C++/WinRT pour Windows Desktop, qui affiche un Windows.Foundation.Uri Windows Runtime dans un MessageBox 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.

Composant Windows Runtime (C++/WinRT)Windows Runtime Component (C++/WinRT)

Modèle de projet pour un composant, en général pour une consommation à partir d’une plateforme Windows universelle (UWP).A project template for a component; typically for consumption from a Universal Windows Platform (UWP).

Ce modèle illustre la chaîne d’outils midl.exe > cppwinrt.exe où les métadonnées Windows Runtime (.winmd) sont générées à partir du fichier IDL, puis où les stubs d’implémentation et d’en-tête sont générés à partir des métadonnées 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.

Dans un fichier IDL, définissez les classes runtime dans votre composant, leur interface par défaut et toute autre interface qu’elles implémentent.In an IDL file, define the runtime classes in your component, their default interface, and any other interfaces they implement. Générez une fois le projet pour générer module.g.cpp, module.h.cpp, les modèles d’implémentation dans Generated Files et les définitions de type de stub dans 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. Utilisez ensuite ces définitions de type de stub comme référence pour implémenter les classes runtime dans votre composant.Then use those the stub type definitions for reference to implement the runtime classes in your component. Consultez Factorisation des classes runtime dans des fichiers Midl (.idl).See Factoring runtime classes into Midl files (.idl).

Regroupez le fichier binaire du composant Windows Runtime intégré et son fichier .winmd avec l’application UWP qui les consomme.Bundle the built Windows Runtime component binary and its .winmd with the UWP app consuming them.

Versions antérieures de l’extension VSIXEarlier versions of the VSIX extension

Nous vous recommandons d’installer la dernière version de l’extension VSIX (ou d’effectuer une mise à jour vers celle-ci).We recommend that you install (or update to) the latest version of the VSIX extension. Elle est configurée pour effectuer ses propres mises à jour par défaut.It is configured to update itself by default. Si vous procédez ainsi, et que vous avez des projets qui ont été créés avec une version de l’extension VSIX antérieure à 1.0.190128.4, cette section contient des informations importantes sur la mise à niveau de ces projets pour travailler avec la nouvelle version.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. Si vous n’effectuez pas de mise à jour, vous trouverez malgré tout les informations de cette section utiles.If you don't update, then you'll still find the info in this section useful.

En termes de SDK Windows et de versions de Visual Studio pris en charge, ainsi que de configuration Visual Studio, les informations de la section Prise en charge Visual Studio pour C++/WinRT, XAML, l’extension VSIX et le package NuGet ci-dessus s’appliquent aux versions antérieures de l’extension 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. Les informations ci-dessous décrivent les différences importantes concernant le comportement et la configuration de projets créés avec des versions antérieures (ou mis à niveau pour fonctionner avec de telles versions).The info below describes important differences regarding the behavior and configuration of projects created with (or upgraded to work with) earlier versions.

Créé avant la version 1.0.181002.2Created earlier than 1.0.181002.2

Si votre projet a été créé avec une version de l’extension VSIX antérieure à 1.0.181002.2, la prise en charge des builds C++/WinRT a été intégrée à cette version de l’extension 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. Votre projet comporte la propriété <CppWinRTEnabled>true</CppWinRTEnabled> définie dans le fichier .vcxproj.Your project has the <CppWinRTEnabled>true</CppWinRTEnabled> property set in the .vcxproj file.

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

Vous pouvez mettre à niveau votre projet en installant manuellement le package NuGet Microsoft.Windows.CppWinRT.You can upgrade your project by manually installing the Microsoft.Windows.CppWinRT NuGet package. Après l’installation de la dernière version de l’extension VSIX (ou une mise à niveau vers cette version), ouvrez votre projet dans Visual Studio, cliquez sur Projet > Gérer les packages NuGet... > Parcourir, tapez ou collez Microsoft.Windows.CppWinRT dans la zone de recherche, sélectionnez l’élément dans les résultats de la recherche, puis cliquez sur Installer pour installer le package correspondant à votre projet.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.

Créé avec une version comprise entre 1.0.181002.2 et 1.0.190128.3 (ou mis à niveau vers ces versions)Created with (or upgraded to) between 1.0.181002.2 and 1.0.190128.3

Si votre projet a été créé avec une version de l’extension VSIX comprise entre 1.0.181002.2 et 1.0.190128.3 (incluses), le package NuGet Microsoft.Windows.CppWinRT a été installé automatiquement dans le projet par le modèle de projet.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. Il est également possible que vous ayez mis à niveau un ancien projet pour utiliser une version de l’extension VSIX de cette plage.You might also have upgraded an older project to use a version of the VSIX extension in this range. Si c’est le cas, étant donné que la prise en charge des builds était également toujours présente dans les versions de l’extension VSIX de cette plage, le package NuGet Microsoft.Windows.CppWinRT peut, ou non, être installé dans votre projet mis à niveau.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.

Pour mettre à niveau votre projet, suivez les instructions de la section précédente, puis vérifiez que votre projet a le package NuGet Microsoft.Windows.CppWinRT installé.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.

Configurations de mise à niveau non validesInvalid upgrade configurations

Avec la dernière version de l’extension VSIX, il n’est pas valable qu’un projet ait la propriété <CppWinRTEnabled>true</CppWinRTEnabled> s’il n’a pas également le package NuGet Microsoft.Windows.CppWinRT installé.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 projet avec cette configuration produit le message d’erreur de build « L’extension VSIX C++/WinRT ne fournit plus de prise en charge de build de projet.A project with this configuration produces the build error message, "The C++/WinRT VSIX no longer provides project build support. Ajoutez une référence de projet au package NuGet Microsoft.Windows.CppWinRT. »Please add a project reference to the Microsoft.Windows.CppWinRT Nuget package."

Comme indiqué ci-dessus, le package NuGet doit maintenant être installé un projet C++/WinRT.As mentioned above, a C++/WinRT project now needs to have the NuGet package installed in it.

Étant donné que l’élément <CppWinRTEnabled> est désormais obsolète, vous pouvez éventuellement modifier votre .vcxproj et supprimer l’élément.Since the <CppWinRTEnabled> element is now obsolete, you can optionally edit your .vcxproj, and delete the element. Cela n’est pas absolument nécessaire, mais c’est envisageable.It's not strictly necessary, but it's an option.

De plus, si votre .vcxproj contient <RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles>, vous pouvez le supprimer afin de pouvoir effectuer une génération sans exiger que l’extension VSIX C++/WinRT soit installée.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.

Prise en charge du SDK pour C++/WinRTSDK support for C++/WinRT

Même s’il est désormais présent pour des raisons de compatibilité uniquement, à compter de la version 10.0.17134.0 (Windows 10, version 1803), le SDK Windows contient une bibliothèque C++ standard basée sur un fichier d’en-tête pour une consommation d’API Windows internes (API Windows Runtime dans les espaces de noms 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). Ces en-têtes se trouvent dans le dossier %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt.Those headers are inside the folder %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt. À compter du SDK Windows version 10.0.17763.0 (Windows 10, version 1809), ces en-têtes sont automatiquement générés dans le dossier $(GeneratedFilesDir) de votre projet.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.

À nouveau pour des raisons de compatibilité, le SDK Windows est également fourni avec l’outil cppwinrt.exe.Again for compatibility, the Windows SDK also comes with the cppwinrt.exe tool. Toutefois, nous vous recommandons d’installer et d’utiliser plutôt la version la plus récente de cppwinrt.exe, qui est incluse dans le package 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. Ce package et cppwinrt.exe sont décrits dans les sections ci-dessus.That package, and cppwinrt.exe, are described in the sections above.

Types personnalisés dans la projection C++/WinRTCustom types in the C++/WinRT projection

Dans votre programmation C++/WinRT, vous pouvez utiliser les fonctionnalités de langage C++ standard et les types de données C++ standard et C++/WinRT, notamment certains types de données de la bibliothèque C++ standard.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. Toutefois, vous prendrez également connaissance de certains types de données personnalisés dans la projection, que vous pourrez choisir d’utiliser.But you'll also become aware of some custom data types in the projection, and you can choose to use them. Par exemple, nous utilisons winrt::hstring dans l’exemple de code de démarrage rapide indiqué dans Bien démarrer avec C++/WinRT.For example, we use winrt::hstring in the quick-start code example in Get started with C++/WinRT.

winrt::com_array est un autre type que vous êtes susceptible d’utiliser à un moment donné.winrt::com_array is another type that you're likely to use at some point. Mais vous êtes moins susceptible d’utiliser directement un type tel que winrt::array_view.But you're less likely to directly use a type such as winrt::array_view. Ou vous pouvez choisir de ne pas l’utiliser, de sorte que vous n’aurez aucun code à changer si un type équivalent s’affiche dans la bibliothèque C++ standard.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.

Avertissement

Il existe également des types que vous pouvez voir si vous étudiez attentivement les en-têtes d’espace de noms Windows C++/WinRT.There are also types that you might see if you closely study the C++/WinRT Windows namespace headers. Il s’agit, par exemple, de winrt::param::hstring, mais il existe également des exemples de collection.An example is winrt::param::hstring, but there are collection examples too. Ces types servent uniquement à optimiser la liaison des paramètres d’entrée. Ils génèrent d’importantes améliorations des performances et assurent le « simple fonctionnement » de la plupart des modèles d’appel pour les conteneurs et les types C++ standard associés.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. Ces types ne sont utilisés par la projection que dans les cas où ils ajoutent de la valeur.These types are only ever used by the projection in cases where they add most value. Ils sont hautement optimisés et ne sont pas destinés à une utilisation générale ; ne tentez pas de les utiliser vous-même.They're highly optimized and they're not for general use; don't be tempted to use them yourself. N’utilisez pas non plus d’éléments de l’espace de noms winrt::impl, car il s’agit de types d’implémentation susceptibles, donc, d’être modifiés.Nor should you use anything from the winrt::impl namespace, since those are implementation types, and therefore subject to change. Vous devez continuer à utiliser les types standard, ou des types de l’espace de noms winrt.You should continue to use standard types, or types from the winrt namespace.

Consultez également Passage de paramètres à la frontière ABI.Also see Passing parameters into the ABI boundary.

API importantesImportant APIs