Introduzione a C++/WinRTIntroduction to C++/WinRT

 

 

C++/WinRT è una proiezione del linguaggio C++ 17 interamente standard e moderna per le API di Windows Runtime (WinRT), implementata come libreria basata su file di intestazione e progettata per fornirti accesso privilegiato alla moderna API di 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 puoi creare e utilizzare API di Windows Runtime usando qualsiasi compilatore C++17 conforme agli standard.With C++/WinRT, you can author and consume Windows Runtime APIs using any standards-compliant C++17 compiler. Windows SDK include C++/WinRT, introdotto nella versione 10.0.17134.0 (Windows 10, versione 1803).The Windows SDK includes C++/WinRT; it was introduced in version 10.0.17134.0 (Windows 10, version 1803).

C++/WinRT è la sostituzione consigliata da Microsoft per la proiezione del linguaggio C++/CX e la Libreria modelli C++ per Windows Runtime.C++/WinRT is Microsoft's recommended replacement for the C++/CX language projection, and the Windows Runtime C++ Template Library (WRL). L'elenco completo dei argomenti su C++/WinRT include informazioni sull'interoperabilità e sulla conversione da C++/CX e WRL.The full list of topics about C++/WinRT includes info about both interoperating with, and porting from, C++/CX and WRL.

Importante

Alcuni dei componenti più importanti di C++/WinRT da conoscere sono descritti nelle sezioni Supporto di SDK per C++/WinRT e Supporto di Visual Studio per C++/WinRT, XAML, l'estensione VSIX e il pacchetto 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.

Vedere anche Dove si possono trovare app di esempio C++/WinRT?Also see Where can I find C++/WinRT sample apps?.

Proiezioni di linguaggioLanguage projections

Windows Runtime è basato sulle API COM (Component Object Model) ed è progettato per essere accessibile tramite proiezioni di linguaggio.The Windows Runtime is based on Component Object Model (COM) APIs, and it's designed to be accessed through language projections. Una proiezione nasconde i dettagli COM e offre un'esperienza di programmazione più naturale per un determinato linguaggio.A projection hides the COM details, and provides a more natural programming experience for a given language.

Proiezione di linguaggio C++/WinRT nel contenuto di riferimento delle API di Windows RuntimeThe C++/WinRT language projection in the Windows Runtime API reference content

Quando esplori le API di Windows Runtime, fai clic sulla casella combinata Linguaggio in alto a destra e seleziona C++/WinRT per visualizzare i blocchi di sintassi di API come appaiono nella proiezione di linguaggio 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.

Supporto di Visual Studio per C++/WinRT, XAML, l'estensione VSIX e il pacchetto NuGetVisual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package

Per il supporto di Visual Studio, è necessario Visual Studio 2019 o Visual Studio 2017 (versione minima 15.6; si consiglia almeno 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). Dal programma di installazione di Visual Studio installare il carico di lavoro Sviluppo di app per la piattaforma UWP (Universal Windows Platform) .From within the Visual Studio Installer, install the Universal Windows Platform development workload. In Dettagli di installazione > Sviluppo di app per la piattaforma UWP (Universal Windows Platform) seleziona una o più opzioni di Strumenti della piattaforma UWP (Universal Windows Platform) C++ (v14x) , se non lo hai già fatto.In Installation Details > Universal Windows Platform development, check the C++ (v14x) Universal Windows Platform tools option(s), if you haven't already done so. Inoltre, in Impostazioni > Aggiornamento e &sicurezza > Per sviluppatori di Windows, scegli l'opzione Modalità sviluppatore invece dell'opzione Sideload app.And, in Windows Settings > Update & Security > For developers, choose the Developer mode option rather than the Sideload apps option.

Anche se è consigliabile usare le ultime versioni di Visual Studio e Windows SDK per lo sviluppo, se insieme a Windows SDK usi una versione di C++/WinRT precedente alla versione 10.0.17763.0 (Windows 10, versione 1809), sarà necessaria almeno la versione di destinazione 10.0.17134.0 di Windows SDK nel progetto (Windows 10, versione 1803) per usare le intestazioni degli spazi dei nomi sopra menzionate.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).

Dovresti scaricare e installare la versione più recente dell'Estensione di Visual Studio C++/WinRT (VSIX) da 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'estensione VSIX offre modelli di progetto ed elemento di C++/WinRT in Visual Studio, per poter iniziare a sviluppare con 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.
  • In aggiunta, VSIX offre la visualizzazione di debug nativo di Visual Studio (natvis) dei tipi progettai C++/WinRT, fornendo un'esperienza simile al debug 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 è automatico per le build di debug.Natvis is automatic for debug builds. Puoi acconsentire esplicitamente al rilascio di build definendo il simbolo WINRT_NATVIS.You can opt into it release builds by defining the symbol WINRT_NATVIS.

I modelli di progetto di Visual Studio per C++/WinRT sono descritti nelle sezioni seguenti.The Visual Studio project templates for C++/WinRT are described in the sections below. Quando crei un nuovo progetto di C++/WinRT con l'ultima versione dell'estensione VSIX installata, verrà installato automaticamente il pacchetto 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. Il pacchetto NuGet Microsoft.Windows.CppWinRT fornisce il supporto per la compilazione in C++/WinRT (proprietà e destinazioni di MSBuild), rendendo il progetto portabile tra un computer di sviluppo e un agente di compilazione (in cui viene installato solo il pacchetto NuGet, e non l'estensione 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).

In alternativa, puoi convertire un progetto esistente installando manualmente il pacchetto NuGet Microsoft.Windows.CppWinRT.Alternatively, you can convert an existing project by manually installing the Microsoft.Windows.CppWinRT NuGet package. Dopo aver installato la versione più recente dell'estensione VSIX (o aver eseguito l'aggiornamento a tale versione), apri il progetto esistente in Visual Studio, fai clic su Progetto > Gestisci pacchetti NuGet > Sfoglia, digita o incolla Microsoft.Windows.CppWinRT nella casella di ricerca, seleziona l'elemento nei risultati della ricerca e quindi fai clic su Installa per installare il pacchetto per il progetto.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. Dopo che avrai aggiunto il pacchetto, otterrai il supporto MSBuild C++/WinRT per il progetto, inclusa la chiamata dello strumento 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

Se hai progetti che sono stati creati con (o aggiornati in modo da funzionare con) una versione dell'estensione VSIX precedente alla 1.0.190128.4, vedi Versioni precedenti dell'estensione 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. Questa sezione contiene informazioni importanti sulla configurazione dei progetti, che è necessario conoscere per eseguire l'aggiornamento in modo che usino l'ultima versione dell'estensione 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.

  • Dato che C++/WinRT usa funzionalità dallo standard C++17, il pacchetto NuGet imposta la proprietà del progetto C/C++ > Linguaggio > Standard del linguaggio C++ > ISO C++17 Standard (/std:c++17) in 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.
  • Aggiunge anche l'opzione del compilatore /bigobj.It also adds the /bigobj compiler option.
  • Aggiunge l'opzione del compilatore /await per abilitare co_await.It adds the /await compiler option in order to enable co_await.
  • Indica al compilatore XAML di generare istruzioni a partire dal codice C++/WinRT.It instructs the XAML compiler to emit C++/WinRT codegen.
  • Puoi inoltre impostare Modalità di conformità: Sì (/permissive-) , che limita ulteriormente il codice affinché sia conforme agli standard.You might also want to set Conformance mode: Yes (/permissive-), which further constrains your code to be standards-compliant.
  • Un'altra proprietà di progetto da tenere presente è C/C++ > Generale > Considera gli avvisi come errori.Another project property to be aware of is C/C++ > General > Treat Warnings As Errors. Imposta questa proprietà su Sì (/WX) o No (/WX-) a seconda delle esigenze.Set this to Yes(/WX) or No (/WX-) to taste. In alcuni casi, i file di origine generati dallo strumento cppwinrt.exe generano avvisi fino a quando non aggiungi l'implementazione.Sometimes, source files generated by the cppwinrt.exe tool generate warnings until you add your implementation to them.

Con il sistema impostato come descritto in precedenza, potrai creare e compilare, o aprire, un progetto C++/WinRT in Visual Studio e distribuirlo.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 partire dalla versione 2.0, il pacchetto NuGet Microsoft.Windows.CppWinRT include lo strumento cppwinrt.exe.As of version 2.0, the Microsoft.Windows.CppWinRT NuGet package includes the cppwinrt.exe tool. È possibile puntare lo strumento cppwinrt.exe su un file di metadati di Windows Runtime (.winmd) per generare una libreria C++ standard basata su file di intestazione che proietta le API descritte nei metadati per l'utilizzo dal codice 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. I file di metadati Windows Runtime (.winmd) forniscono un modo canonico di descrivere una superficie di API Windows Runtime.Windows Runtime metadata (.winmd) files provide a canonical way of describing a Windows Runtime API surface. Puntando cppwinrt.exe sui metadati, puoi generare una libreria per l'uso con qualsiasi classe di runtime implementata in un componente Windows Runtime di seconda o terza parte o implementata nella tua applicazione.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. Per altre info, vedi Usare API con C++/WinRT.For more info, see Consume APIs with C++/WinRT.

Con C++/WinRT, puoi anche implementare le tue classi di runtime in C++ standard, senza ricorrere alla programmazione di tipo COM.With C++/WinRT, you can also implement your own runtime classes using standard C++, without resorting to COM-style programming. Per una classe di runtime, è sufficiente descrivere i tipi in un file IDL, e midl.exe e cppwinrt.exe generano i file del codice sorgente boilerplate di implementazione per te.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. In alternativa puoi semplicemente implementare le interfacce eseguendo la derivazione dalla classe di base C++/WinRT.You can alternatively just implement interfaces by deriving from a C++/WinRT base class. Per altre info, vedi Creare API con C++/WinRT.For more info, see Author APIs with C++/WinRT.

Per un elenco di opzioni di personalizzazione per lo strumento cppwinrt.exe, impostate tramite le proprietà del progetto, vedi il file readme del pacchetto 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.

Puoi identificare un progetto che usa il supporto MSBuild C++/WinRT dalla presenza del pacchetto NuGet Microsoft.Windows.CppWinRT installato all'interno del progetto.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.

Ecco i modelli di progetto Visual Studio forniti dall'estensione VSIX.Here are the Visual Studio project templates provided by the VSIX extension.

Applicazione vuota (C++/WinRT)Blank App (C++/WinRT)

Un modello di progetto per un'app della piattaforma UWP (Universal Windows Platform) con un'interfaccia utente XAML.A project template for a Universal Windows Platform (UWP) app that has a XAML user-interface.

Visual Studio offre il supporto del compilatore XAML per generare stub di implementazione e intestazione dal file del linguaggio di definizione interfaccia (IDL) (.idl) che si trova dietro ogni file di markup 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. In un file IDL, definisci tutte le classi di runtime locali a cui desideri fare riferimento nelle pagine XAML della tua app, quindi compila il progetto una volta per generare i modelli di implementazione in Generated Files e le definizioni dei tipi di stub in 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. Usa quindi queste definizioni dei tipi di stub come riferimento per implementare le classi di runtime locali.Then use those stub type definitions for reference to implement your local runtime classes. Vedi Factoring delle classi di runtime nei file Midl (.idl).See Factoring runtime classes into Midl files (.idl).

Il supporto dell'area di progettazione XAML in Visual Studio 2019 per C++/WinRT è vicino alla parità con C#.The XAML design surface support in Visual Studio 2019 for C++/WinRT is close to parity with C#. In Visual Studio 2019, è possibile usare la scheda Eventi della finestra Proprietà per aggiungere gestori di eventi all'interno di un progetto 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. È anche possibile aggiungere gestori eventi al codice manualmente. Per altre informazioni, vedi Gestire eventi mediante i delegati in C++/WinRT.You can also add event handlers to your code manually—see Handle events by using delegates in C++/WinRT for more info.

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

Un modello di progetto per un'app della piattaforma UWP (Universal Windows Platform) che non usa XAML.A project template for a Universal Windows Platform (UWP) app that doesn't use XAML.

Al contrario, usa l'intestazione dello spazio dei nomi Windows di C++/WinRT per lo spazio dei nomi Windows.ApplicationModel.Core.Instead, it uses the C++/WinRT Windows namespace header for the Windows.ApplicationModel.Core namespace. Dopo la compilazione e l'esecuzione, fai clic su uno spazio vuoto per aggiungere un quadrato colorato, quindi fai clic su un quadrato colorato per trascinarlo.After building and running, click on an empty space to add a colored square; then click on a colored square to drag it.

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

Un modello di progetto per un'applicazione client C++/WinRT per Windows Desktop, con un'interfaccia utente della console.A project template for a C++/WinRT client application for Windows Desktop, with a console user-interface.

Applicazione desktop di Windows (C++/WinRT)Windows Desktop Application (C++/WinRT)

Un modello di progetto per un'applicazione client C++/WinRT per Windows Desktop, che visualizza un Windows.Foundation.Uri di Windows Runtime all'interno di una MessageBox di 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 Windows Runtime (C++/WinRT)Windows Runtime Component (C++/WinRT)

Un modello di progetto per un componente, generalmente per l'utilizzo da una piattaforma UWP (Universal Windows Platform).A project template for a component; typically for consumption from a Universal Windows Platform (UWP).

Questo modello illustra la toolchain midl.exe > cppwinrt.exe, in cui i metadati di Windows Runtime (.winmd) vengono generati da IDL e gli stub di implementazione e di intestazione vengono generati dai metadati di 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.

In un file IDL, definisci le classi di runtime nel tuo componente, la loro interfaccia predefinita e qualunque altra interfaccia che implementano.In an IDL file, define the runtime classes in your component, their default interface, and any other interfaces they implement. Compila il progetto una volta per generare module.g.cpp, module.h.cpp, i modelli di implementazione in Generated Files e le definizioni del tipo di stub in 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. Quindi usa tali definizioni di tipo stub come riferimento per implementare le classi di runtime locali.Then use those the stub type definitions for reference to implement the runtime classes in your component. Vedi Factoring delle classi di runtime nei file Midl (.idl).See Factoring runtime classes into Midl files (.idl).

Crea un bundle del file binario del componente Windows Runtime e del relativo file .winmd con l'app UWP che li usa.Bundle the built Windows Runtime component binary and its .winmd with the UWP app consuming them.

Versioni precedenti dell'estensione VSIXEarlier versions of the VSIX extension

È consigliabile installare (o aggiornare) l'ultima versione dell'estensione VSIX.We recommend that you install (or update to) the latest version of the VSIX extension. Per impostazione predefinita, la configurazione prevede l'aggiornamento automatico.It is configured to update itself by default. Se esegui l'aggiornamento e hai progetti che sono stati creati con una versione dell'estensione VSIX precedente alla 1.0.190128.4, questa sezione contiene informazioni importanti sull'aggiornamento di quei progetti con la nuova versione.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. Se non esegui l'aggiornamento, troverai comunque utili le informazioni in questa sezione.If you don't update, then you'll still find the info in this section useful.

In termini di versioni supportate di Windows SDK e Visual Studio e di configurazione di Visual Studio, le informazioni nella precedente sezione Supporto di Visual Studio per C++/WinRT, XAML, l'estensione VSIX e il pacchetto NuGet si applicano alle versioni precedenti dell'estensione 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. Le informazioni seguenti descrivono le importanti differenze riguardanti il comportamento e la configurazione dei progetti creati (o aggiornati in modo da funzionare con) le versioni precedenti.The info below describes important differences regarding the behavior and configuration of projects created with (or upgraded to work with) earlier versions.

Creato prima della versione 1.0.181002.2Created earlier than 1.0.181002.2

Se il progetto è stato creato con una versione dell'estensione VSIX precedente alla 1.0.181002.2, il supporto per la compilazione in C++/WinRT è stato integrato in tale versione dell'estensione 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. La proprietà <CppWinRTEnabled>true</CppWinRTEnabled> è impostata nel file .vcxproj del progetto.Your project has the <CppWinRTEnabled>true</CppWinRTEnabled> property set in the .vcxproj file.

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

Puoi aggiornare il tuo progetto installando manualmente il pacchetto NuGet Microsoft.Windows.CppWinRT.You can upgrade your project by manually installing the Microsoft.Windows.CppWinRT NuGet package. Dopo aver installato la versione più recente dell'estensione VSIX (o aver eseguito l'aggiornamento a tale versione) , apri il tuo progetto in Visual Studio, fai clic su Progetto > Gestisci pacchetti NuGet > Sfoglia, digita o incolla Microsoft.Windows.CppWinRT nella casella di ricerca, seleziona l'elemento nei risultati della ricerca e quindi fai clic su Installa per installare il pacchetto per il progetto.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.

Creato con (o aggiornato a) una versione compresa tra 1.0.181002.2 e 1.0.190128.3Created with (or upgraded to) between 1.0.181002.2 and 1.0.190128.3

Se il progetto è stato creato con una versione dell'estensione VSIX compresa tra 1.0.181002.2 e 1.0.190128.3 incluse, il pacchetto NuGet Microsoft.Windows.CppWinRT è stato installato nel progetto automaticamente dal modello di progetto.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. Potresti anche aver aggiornato un progetto precedente in modo da usare una versione dell'estensione VSIX comprese in questo intervallo.You might also have upgraded an older project to use a version of the VSIX extension in this range. In tal caso, dal momento che il supporto per la compilazione era ancora presente nelle versioni dell'estensione VSIX comprese in questo intervallo, il pacchetto NuGet Microsoft.Windows.CppWinRT può essere o non essere stato installato nel progetto aggiornato.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.

Per aggiornare il progetto, segui le istruzioni contenute nella sezione precedente e assicurati che nel progetto sia stato installato il pacchetto 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.

Configurazioni di aggiornamento non valideInvalid upgrade configurations

Con la versione più recente dell'estensione VSIX, un progetto non può contenere la proprietà <CppWinRTEnabled>true</CppWinRTEnabled> se non ha anche il pacchetto NuGet Microsoft.Windows.CppWinRT installato.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 progetto con questa configurazione genera il messaggio di errore di compilazione: "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" (C++/WinRT VSIX non offre più il supporto per la compilazione dei progetti. Aggiungi un riferimento al progetto nel pacchetto NuGet Microsoft.Windows.CppWinRT).Please add a project reference to the Microsoft.Windows.CppWinRT Nuget package."

Come indicato in precedenza, un progetto C++/WinRT deve ora includere il pacchetto NuGet installato.As mentioned above, a C++/WinRT project now needs to have the NuGet package installed in it.

Poiché l'elemento <CppWinRTEnabled> è obsoleto, è possibile modificare facoltativamente .vcxproj ed eliminare l'elemento.Since the <CppWinRTEnabled> element is now obsolete, you can optionally edit your .vcxproj, and delete the element. Non è strettamente necessario, ma è un'opzione.It's not strictly necessary, but it's an option.

Inoltre, se .vcxproj contiene <RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles>, è possibile rimuoverlo per poter compilare senza richiedere l'installazione dell'estensione VSIX di 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.

Supporto di SDK per C++/WinRTSDK support for C++/WinRT

Benché sia ora presente solo per motivi di compatibilità, a partire dalla versione 10.0.17134.0 (Windows 10, versione 1803), Windows SDK contiene una libreria C++ standard basate su file di intestazione per l'utilizzo di API di Windows di terze parti (API Windows Runtime in spazi dei nomi 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). Queste intestazioni sono all'interno della cartella %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt.Those headers are inside the folder %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt. A partire da Windows SDK versione 10.0.17763.0 (Windows 10, versione 1809), queste intestazioni vengono generate automaticamente all'interno della cartella $(GeneratedFilesDir) del tuo progetto.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.

Anche in questo caso per la compatibilità, Windows SDK include anche lo strumento cppwinrt.exe.Again for compatibility, the Windows SDK also comes with the cppwinrt.exe tool. Tuttavia, è consigliabile invece installare e usare la versione più recente di cppwinrt.exe, inclusa con il pacchetto 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. Tale pacchetto, e cppwinrt.exe, sono descritti nelle sezioni precedenti.That package, and cppwinrt.exe, are described in the sections above.

Tipi personalizzati nella proiezione C++/WinRTCustom types in the C++/WinRT projection

Nella programmazione C++/WinRT, puoi usare funzionalità del linguaggio C++ standard e tipi di dati C++ standard e C++/WinRT, inclusi alcuni tipi di dati della libreria standard C++, nella programmazione C++/WinRT.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. Ma verrai anche a conoscenza di alcuni tipi di dati personalizzati nella proiezione, che potrai scegliere di usare.But you'll also become aware of some custom data types in the projection, and you can choose to use them. Ad esempio, usiamo winrt::hstring nell'esempio di codice di avvio rapido in Informazioni di base su C++/WinRT.For example, we use winrt::hstring in the quick-start code example in Get started with C++/WinRT.

winrt::com_array è un altro tipo che potresti usare in un determinato momento.winrt::com_array is another type that you're likely to use at some point. Molto probabilmente non userai direttamente un tipo come winrt::array_view.But you're less likely to directly use a type such as winrt::array_view. Oppure puoi scegliere di non usarlo in modo da non avere codice da modificare se e quando viene visualizzato un tipo equivalente nella libreria standard 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.

Avviso

Esistono anche tipi che potresti vedere se studi attentamente le intestazioni dello spazio dei nomi Windows di C++/WinRT.There are also types that you might see if you closely study the C++/WinRT Windows namespace headers. Un esempio è winrt::param::hstring, ma esistono anche altri esempi di raccolta.An example is winrt::param::hstring, but there are collection examples too. Esistono esclusivamente per ottimizzare l'associazione di parametri di input e producono grandi miglioramenti delle prestazioni, e fanno in modo che la maggior parte dei motivi di chiamata "funzionino semplicemente" per i contenitori e tipi C++ standard correlati.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. Questi tipi vengono usati esclusivamente dalla proiezione nei casi in cui aggiungono maggiormente valore.These types are only ever used by the projection in cases where they add most value. Sono altamente ottimizzati e non sono per uso generale; non provare a usarli da solo.They're highly optimized and they're not for general use; don't be tempted to use them yourself. Non è inoltre consigliabile usare alcun oggetto dello spazio dei nomi winrt::impl, dal momento che si tratta di tipi di implementazione, quindi soggetti a modifica.Nor should you use anything from the winrt::impl namespace, since those are implementation types, and therefore subject to change. È consigliabile continuare a usare tipi standard o tipi dello dello spazio dei nomi winrt.You should continue to use standard types, or types from the winrt namespace.

Vedi anche Passaggio di parametri nel limite ABI.Also see Passing parameters into the ABI boundary.

API importantiImportant APIs