C++/WinRTC++/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 è dedicato agli sviluppatori interessati alla scrittura di codice ben fatto e veloce per Windows.C++/WinRT is for any developer interested in writing beautiful and fast code for Windows. Ecco perché.Here's why.

Il caso di C++/WinRTThe case for C++/WinRT

 

Il linguaggio di programmazione C++ viene usato nei segmenti delle grandi aziende e dei fornitori di software indipendenti (ISV) per le applicazioni in cui la correttezza, la qualità e le prestazioni devono essere elevate.The C++ programming language is used both in the enterprise and independent software vendor (ISV) segments for applications where high levels of correctness, quality, and performance are valued. Parliamo ad esempio di sistemi di programmazione, sistemi incorporati e mobili con risorse limitate, giochi e grafica, driver di dispositivo e applicazioni industriali, scientifiche e mediche, per citarne solo alcuni.For example: systems programming; resource-constrained embedded and mobile systems; games and graphics; device drivers; and industrial, scientific, and medical applications, to name but some.

Dal punto di vista del linguaggio, C++ ha sempre riguardato la creazione e l'utilizzo di astrazioni sia con molti tipi di dati che leggere.From a language point of view, C++ has always been about authoring and consuming abstractions that are both type-rich and lightweight. Ma il linguaggio è cambiato radicalmente rispetto ai puntatori non elaborati, ai cicli non elaborati e alle minuziose operazioni di allocazione e liberazione di memoria di C++98.But the language has changed radically since the raw pointers, raw loops, and painstaking memory allocation and releasing of C++98. Il linguaggio C++ moderno (da C++11 in poi) è caratterizzato da una chiara espressione di idee, semplicità, leggibilità e dalla minor probabilità di introdurre bug.Modern C++ (from C++11 onward) is about clear expression of ideas, simplicity, readability, and a much lower likelihood of introducing bugs.

Per la creazione e l'utilizzo di API di Windows Runtime con C++, esiste C++/WinRT.For authoring and consuming Windows Runtime APIs using C++, there is C++/WinRT. Si tratta della sostituzione consigliata da Microsoft per la proiezione del linguaggio C++/CX e la Libreria modelli C++ per Windows Runtime.This is Microsoft's recommended replacement for the C++/CX language projection, and the Windows Runtime C++ Template Library (WRL).

Con C++/WinRT usi tipi di dati, algoritmi e parole chiave C++ standard.You use standard C++ data types, algorithms, and keywords when you use C++/WinRT. La proiezione ha i propri tipi di dati personalizzati, ma nella maggior parte dei casi non è necessario imparare a usarli in quanto forniscono conversioni appropriate da e verso tipi standard.The projection does have its own custom data types, but in most cases you don't need to learn them because they provide appropriate conversions to and from standard types. Puoi quindi continuare a usare le funzionalità del linguaggio C++ standard a cui sei abituato e il codice sorgente di cui già disponi.That way, you can continue to use the standard C++ language features that you're accustomed to using, and the source code that you already have. Con C++/WinRT è semplicissimo chiamare API di Windows Runtime in qualsiasi applicazione C++, da Win32 alla piattaforma UWP.C++/WinRT makes it extremely easy to call Windows Runtime APIs in any C++ application, from Win32 to UWP.

C++/WinRT offre prestazioni migliori e genera file binari di dimensioni inferiori rispetto a qualunque altra opzione di linguaggio per Windows Runtime.C++/WinRT performs better and produces smaller binaries than any other language option for the Windows Runtime. Le sue prestazioni sono superiori persino al codice scritto a mano usando direttamente le interfacce ABI.It even outperforms handwritten code using the ABI interfaces directly. Questo avviene perché le astrazioni usano idiomi C++ moderni che il compilatore di Visual C++ è progettato per ottimizzare,That's because the abstractions use modern C++ idioms that the Visual C++ compiler is designed to optimize. ad esempio variabili statiche dichiarate all'interno di una funzione, classi di base vuote, elisione strlen, nonché molte ottimizzazioni più recenti dell'ultima versione di Visual C++ destinate specificamente a migliorare le prestazioni di C++/WinRT.This includes magic statics, empty base classes, strlen elision, as well as many newer optimizations in the latest version of Visual C++ targeted specifically at improving the performance of C++/WinRT.

Sono disponibili alcune modalità per un'introduzione graduale di C++/WinRT nei progetti.There are ways to gradually introduce C++/WinRT into your projects. È possibile usare i componenti Windows Runtime oppure interagire con C++/CX.You could use Windows Runtime components, or you could interoperate with C++/CX. Per altre informazioni, vedere Interoperabilità tra C++/WinRT e C++/CX.For more info, see Interop between C++/WinRT and C++/CX.

Per informazioni sulla conversione a C++/WinRT, vedere queste risorse.For info about porting to C++/WinRT, see these resources.

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

Argomenti relativi a C++/WinRTTopics about C++/WinRT

ArgomentoTopic DescrizioneDescription
Introduzione a C++/WinRTIntroduction to C++/WinRT Introduzione a C++/WinRT, una proiezione del linguaggio C++ standard per le API di Windows Runtime.An introduction to C++/WinRT—a standard C++ language projection for Windows Runtime APIs.
Introduzione a C++/WinRTGet started with C++/WinRT Per imparare rapidamente a usare C++/WinRT, questo argomento descrive in dettaglio un semplice esempio di codice.To get you up to speed with using C++/WinRT, this topic walks through a simple code example.
Novità in C++/WinRTWhat's new in C++/WinRT Funzionalità nuove e aggiornate di C++/WinRT.News and changes to C++/WinRT.
Domande frequentiFrequently-asked questions Risposte alle domande che potresti porti sulla creazione e sull'utilizzo delle API Windows Runtime con C++/WinRT.Answers to questions that you're likely to have about authoring and consuming Windows Runtime APIs with C++/WinRT.
Risoluzione dei problemiTroubleshooting La tabella che descrive i sintomi e i rimedi per la risoluzione dei problemi in questo argomento può essere utile se devi creare nuovo codice o convertire un'app esistente.The table of troubleshooting symptoms and remedies in this topic may be helpful to you whether you're cutting new code or porting an existing app.
Applicazione di esempio di C++/WinRT per Photo EditorPhoto Editor C++/WinRT sample application Photo Editor è un'applicazione di esempio UWP che illustra lo sviluppo eseguito con la proiezione del linguaggio C++/WinRT.Photo Editor is a UWP sample application that showcases development with the C++/WinRT language projection. L'applicazione di esempio consente di recuperare le foto dalla raccolta Immagini, quindi di modificare l'immagine selezionata con effetti foto assortiti.The sample application allows you to retrieve photos from the Pictures library, and then edit the selected image with assorted photo effects.
Gestione delle stringheString handling Con C++/WinRT puoi chiamare API di Windows Runtime usando tipi di stringa estesi C++ standard oppure puoi usare il tipo winrt::hstring.With C++/WinRT, you can call Windows Runtime APIs using standard C++ wide string types, or you can use the winrt::hstring type.
Tipi di dati C++ standard e C++/WinRTStandard C++ data types and C++/WinRT Con C++/WinRT puoi chiamare API di Windows Runtime con tipi di dati C++ standard.With C++/WinRT, you can call Windows Runtime APIs using Standard C++ data types.
Boxing e unboxing dei valori scalari in IInspectableBoxing and unboxing scalar values to IInspectable Un valore scalare deve essere sottoposto a wrapping all'interno di un oggetto classe di riferimento prima di essere passato a una funzione che prevede IInspectable.A scalar value needs to be wrapped inside a reference class object before being passed to a function that expects IInspectable. Il processo di wrapping è noto come conversione boxing del valore.That wrapping process is known as boxing the value.
Utilizzare API con C++/WinRTConsume APIs with C++/WinRT Questo argomento descrive come utilizzare le API C++/WinRT, sia che vengano implementate da Windows, da un fornitore di componenti di terze parti o dall'utente stesso.This topic shows how to consume C++/WinRT APIs, whether they're implemented by Windows, a third-party component vendor, or by yourself.
Creare API con C++/WinRTAuthor APIs with C++/WinRT Questo argomento descrive come creare API C++/WinRT usando lo struct di base winrt::implements, direttamente o indirettamente.This topic shows how to author C++/WinRT APIs by using the winrt::implements base struct, either directly or indirectly.
Gestione degli errori con C++/WinRTError handling with C++/WinRT Questo argomento illustra le strategie per la gestione degli errori durante la programmazione con C++/WinRT.This topic discusses strategies for handling errors when programming with C++/WinRT.
Gestire eventi mediante i delegatiHandle events by using delegates Questo argomento illustra come registrare e revocare delegati per la gestione degli eventi con C++/WinRT.This topic shows how to register and revoke event-handling delegates using C++/WinRT.
Creazione di eventiAuthor events Questo argomento descrive come creare un componente Windows Runtime che contiene una classe di runtime che genera eventi.This topic demonstrates how to author a Windows Runtime component containing a runtime class that raises events. Illustra anche un'app che utilizza il componente e gestisce gli eventi.It also demonstrates an app that consumes the component and handles the events.
Gruppi di prodotti con C++/WinRTCollections with C++/WinRT C++/WinRT offre funzioni e classi di base che ti permettono di risparmiare tempo e fatica quando devi implementare e/o passare gruppi di prodotti.C++/WinRT provides functions and base classes that save you a lot of time and effort when you want to implement and/or pass collections.
Concorrenza e operazioni asincroneConcurrency and asynchronous operations Questo argomento illustra i modi per creare e utilizzare oggetti asincroni di Windows Runtime con C++/WinRT.This topic shows the ways in which you can both create and consume Windows Runtime asynchronous objects with C++/WinRT.
Concorrenza e asincronia più avanzateMore advanced concurrency and asynchrony Scenari più avanzati di concorrenza e asincronia in C++/WinRT.More advanced scenarios with concurrency and asynchrony in C++/WinRT.
Controlli XAML, binding a una proprietà C++/WinRTXAML controls; bind to a C++/WinRT property Una proprietà di cui è possibile eseguire in modo efficace il binding a un controllo XAML è nota come proprietà osservabile.A property that can be effectively bound to a XAML control is known as an observable property. Questo argomento illustra come implementare e usare una proprietà osservabile e come eseguire il binding di un controllo XAML alla proprietà.This topic shows how to implement and consume an observable property, and how to bind a XAML control to it.
Controlli di elementi XAML, binding a una raccolta C++/WinRTXAML items controls; bind to a C++/WinRT collection Una raccolta di cui è possibile eseguire in modo efficace il binding a un controllo di elementi XAML è nota come raccolta osservabile.A collection that can be effectively bound to a XAML items control is known as an observable collection. Questo argomento illustra come implementare e usare una raccolta osservabile e come eseguire il binding di un controllo di elementi XAML alla raccolta.This topic shows how to implement and consume an observable collection, and how to bind a XAML items control to it.
Controlli (basati su modelli) personalizzati XAML con C++/WinRTXAML custom (templated) controls with C++/WinRT Questo argomento descrive nel dettaglio i passaggi per la creazione di un semplice controllo personalizzato con C++/WinRT.This topic walks you through the steps of creating a simple custom control using C++/WinRT. Puoi sfruttare le informazioni fornite per creare controlli dell'interfaccia utente personalizzabili e ricchi di funzionalità.You can build on the info here to create your own feature-rich and customizable UI controls.
Passaggio di parametri nel limite ABIPassing parameters into the ABI boundary C++/ WinRT semplifica il passaggio di parametri nel limite ABI fornendo conversioni automatiche per i casi comuni.C++/WinRT simplifies passing parameters into the ABI boundary by providing automatic conversions for common cases.
Utilizzare componenti COM con C++/WinRTConsume COM components with C++/WinRT Questo argomento usa un esempio di codice Direct2D completo per illustrare l'uso di C++/WinRT per utilizzare classi e interfacce COM.This topic uses a full Direct2D code example to show how to use C++/WinRT to consume COM classes and interfaces.
Creare componenti COM con C++/WinRTAuthor COM components with C++/WinRT C++/WinRT non solo ti consente di creare classi di Windows Runtime, ma ti aiuta anche a creare componenti COM classici.C++/WinRT can help you to author classic COM components, just as it helps you to author Windows Runtime classes.
Passare a C++/WinRT da C++/CXMove to C++/WinRT from C++/CX Questo argomento descrive i dettagli tecnici relativi alla conversione del codice sorgente di un progetto C++/CX nell'equivalente in C++/WinRT.This topic describes the technical details involved in porting the source code in a C++/CX project to its equivalent in C++/WinRT.
Interoperabilità tra C++/WinRT e C++/CXInterop between C++/WinRT and C++/CX Questo argomento illustra due funzioni helper che possono essere usate per eseguire la conversione tra oggetti C++/CX e C++/WinRT.This topic shows two helper functions that can be used to convert between C++/CX and C++/WinRT objects.
Asincronia e interoperabilità tra C++/WinRT e C++/CXAsynchrony, and interop between C++/WinRT and C++/CX Si tratta di un argomento avanzato relativo alla conversione graduale da C++/CX a C++/WinRT.This is an advanced topic related to gradually porting from C++/CX to C++/WinRT. Descrive come le attività e le coroutine della libreria PPL (Parallel Patterns Library) possono esistere affiancate nello stesso progetto.It shows how Parallel Patterns Library (PPL) tasks and coroutines can exist side by side in the same project.
Passare a C++/WinRT da WRLMove to C++/WinRT from WRL Questo argomento illustra come convertire il codice della Libreria modelli C++ per Windows Runtime (WRL) nell'equivalente in C++/WinRT.This topic shows how to port Windows Runtime C++ Template Library (WRL) code to its equivalent in C++/WinRT.
Conversione dell'esempio degli Appunti da C# in C++/WinRT from C#— un case studyPorting the Clipboard sample to C++/WinRT from C#—a case study Questo argomento presentata un case study sulla conversione di uno degli esempi di app della piattaforma UWP (Universal Windows Platform) da C# a C++/WinRT.This topic presents a case study of porting one of the Universal Windows Platform (UWP) app samples from C# to C++/WinRT. Per esercitarti e acquisire esperienza nella conversione, segui la procedura dettagliata e prova tu stesso a eseguire la conversione dell'esempio.You can gain porting practice and experience by following along with the walkthrough and porting the sample for yourself as you go.
Passare a C++/WinRT da C#Move to C++/WinRT from C# Questo argomento cataloga in modo completo i dettagli tecnici relativi alla conversione del codice sorgente di un progetto C# nell'equivalente in C++/WinRT.This topic comprehensively catalogs the technical details involved in porting the source code in a C# project to its equivalent in C++/WinRT.
Interoperabilità tra C++/WinRT e ABIInterop between C++/WinRT and the ABI Questo argomento illustra come eseguire la conversione tra oggetti ABI (Application Binary Interface) e C++/WinRT.This topic shows how to convert between application binary interface (ABI) and C++/WinRT objects.
Riferimenti sicuri e deboli in C++/WinRTStrong and weak references in C++/WinRT Windows Runtime è un sistema con conteggio dei riferimenti e in un sistema di questo tipo è importante conoscere il significato e la differenza tra riferimenti sicuri e riferimenti deboli.The Windows Runtime is a reference-counted system; and in such a system it's important for you to know about the significance of, and distinction between, strong and weak references.
Oggetti AgileAgile objects Un oggetto Agile è un oggetto a cui è possibile accedere da qualsiasi thread.An agile object is one that can be accessed from any thread. I tipi C++/WinRT sono Agile per impostazione predefinita, ma puoi scegliere di rifiutare esplicitamente.Your C++/WinRT types are agile by default, but you can opt out.
Diagnosi delle allocazioni diretteDiagnosing direct allocations Questo argomento illustra in dettaglio una funzionalità di C++/WinRT 2.0 che consente di diagnosticare l'errore relativo alla creazione di un oggetto di tipo implementazione nello stack invece di usare la famiglia di helper winrt::make, come necessario.This topic goes in-depth on a C++/WinRT 2.0 feature that helps you diagnose the mistake of creating an object of implementation type on the stack, rather than using the winrt::make family of helpers, as you should.
Punti di estensione per i tipi di implementazioneExtension points for your implementation types Questi punti di estensione in C++/WinRT 2.0 consentono di posticipare la distruzione dei tipi di implementazione, di eseguire query in modo sicuro durante la distruzione e di associarne l'ingresso e l'uscita dai metodi proiettati.These extension points in C++/WinRT 2.0 allow you to defer destruction of your implementation types, to safely query during destruction, and to hook the entry into and exit from your projected methods.
Semplice esempio di libreria dell'interfaccia utente di Windows in C++/WinRTA simple C++/WinRT Windows UI Library example Questo argomento illustra nel dettaglio il processo di aggiunta del supporto semplice per l'interfaccia utente di Windows in un progetto C++/WinRT.This topic walks you through the process of adding simple support for WinUI within a C++/WinRT project.
Componenti Windows Runtime con C++/WinRTWindows Runtime components with C++/WinRT Questo argomento illustra come usare C++/WinRT per creare e utilizzare un componente Windows Runtime — ovvero un componente che può essere chiamato da un'app di Windows universale creata con qualsiasi linguaggio Windows Runtime.This topic shows how to use C++/WinRT to create and consume a Windows Runtime component—a component that's callable from a Universal Windows app built using any Windows Runtime language.

Argomenti relativi al linguaggio C++Topics about the C++ language

ArgomentoTopic DescrizioneDescription
Categorie di valori e riferimentiValue categories, and references to them Questo argomento descrive le varie categorie di valori presenti in C++.This topic describes the various categories of values that exist in C++. Oltre ai ben noti lvalue e rvalue, esistono altri tipi di valori.You will doubtless have heard of lvalues and rvalues, but there are other kinds, too.

API importantiImportant APIs