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. Con C++/WinRT puoi creare e utilizzare API di Windows Runtime usando qualsiasi compilatore C++17 conforme agli standard. Windows SDK include C++/WinRT, introdotto nella versione 10.0.17134.0 (Windows 10, versione 1803).

C++/WinRT è dedicato agli sviluppatori interessati alla scrittura di codice ben fatto e veloce per Windows. Ecco perché.

Il caso di 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. 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.

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. 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. 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.

Per la creazione e l'utilizzo di API di Windows con C++, esiste C++/WinRT. Si tratta della sostituzione consigliata da Microsoft per la proiezione del linguaggio C++/CX e la Libreria modelli C++ per Windows Runtime.

Con C++/WinRT usi tipi di dati, algoritmi e parole chiave C++ standard. 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. Puoi quindi continuare a usare le funzionalità del linguaggio C++ standard a cui sei abituato e il codice sorgente di cui già disponi. Con C++/WinRT è semplicissimo chiamare API di Windows in qualsiasi applicazione C++, da Win32 alla piattaforma UWP.

C++/WinRT offre prestazioni migliori e genera file binari di dimensioni inferiori rispetto a qualunque altra opzione di linguaggio per Windows Runtime. Le sue prestazioni sono superiori persino al codice scritto a mano usando direttamente le interfacce ABI. Questo avviene perché le astrazioni usano idiomi C++ moderni che il compilatore di Visual C++ è progettato per ottimizzare, 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.

Sono disponibili alcune modalità per un'introduzione graduale di C++/WinRT nei progetti. È possibile usare i componenti Windows Runtime oppure interagire con C++/CX. Per altre informazioni, vedere Interoperabilità tra C++/WinRT e C++/CX.

Per informazioni sulla conversione a C++/WinRT, vedere queste risorse.

Vedere anche Dove si possono trovare app di esempio C++/WinRT?

Argomenti relativi a C++/WinRT

Argomento Descrizione
Introduzione a C++/WinRT Introduzione a C++/WinRT, una proiezione del linguaggio C++ standard per le API di Windows.
Introduzione a C++/WinRT Per imparare rapidamente a usare C++/WinRT, questo argomento descrive in dettaglio un semplice esempio di codice.
Novità in C++/WinRT Funzionalità nuove e aggiornate di C++/WinRT.
Domande frequenti Risposte alle domande che potresti porti sulla creazione e sull'utilizzo delle API Windows Runtime con C++/WinRT.
Risoluzione dei problemi 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.
Applicazione di esempio di C++/WinRT per Photo Editor Photo Editor è un'applicazione di esempio UWP che illustra lo sviluppo eseguito con la proiezione del linguaggio C++/WinRT. L'applicazione di esempio consente di recuperare le foto dalla raccolta Immagini, quindi di modificare l'immagine selezionata con effetti foto assortiti.
Gestione della stringa Con C++/WinRT puoi chiamare API di Windows Runtime usando tipi di stringa estesi C++ standard oppure puoi usare il tipo winrt::hstring.
Tipi di dati C++ standard e C++/WinRT Con C++/WinRT puoi chiamare API di Windows Runtime con tipi di dati C++ standard.
Boxing e unboxing dei valori in IInspectable Un valore scalare o array deve essere sottoposto a wrapping all'interno di un oggetto classe di riferimento prima di essere passato a una funzione che prevede IInspectable. Il processo di wrapping è noto come conversione boxing del valore.
Utilizzare API con 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.
Creare API con C++/WinRT Questo argomento descrive come creare API C++/WinRT usando lo struct di base winrt::implements, direttamente o indirettamente.
Gestione degli errori con C++/WinRT Questo argomento illustra le strategie per la gestione degli errori durante la programmazione con C++/WinRT.
Gestire eventi mediante i delegati Questo argomento illustra come registrare e revocare delegati per la gestione degli eventi con C++/WinRT.
Creazione di eventi Questo argomento descrive come creare un componente Windows Runtime che contiene una classe di runtime che genera eventi. Illustra anche un'app che utilizza il componente e gestisce gli eventi.
Gruppi di prodotti con 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.
Concorrenza e operazioni asincrone Questo argomento illustra i modi per creare e utilizzare oggetti asincroni di Windows Runtime con C++/WinRT.
Concorrenza e asincronia avanzate Scenari avanzati di concorrenza e asincronia in C++/WinRT.
Esempio di origine di completamento Illustra come creare e utilizzare la propria classe di origine di completamento.
Controlli XAML, binding a una proprietà C++/WinRT Una proprietà di cui è possibile eseguire in modo efficace il binding a un controllo XAML è nota come proprietà osservabile. Questo argomento illustra come implementare e usare una proprietà osservabile e come eseguire il binding di un controllo XAML alla proprietà.
Controlli di elementi XAML, binding a una raccolta C++/WinRT Una raccolta di cui è possibile eseguire in modo efficace il binding a un controllo di elementi XAML è nota come raccolta osservabile. Questo argomento illustra come implementare e usare una raccolta osservabile e come eseguire il binding di un controllo di elementi XAML alla raccolta.
Controlli (basati su modelli) personalizzati XAML con C++/WinRT Questo argomento descrive nel dettaglio i passaggi per la creazione di un semplice controllo personalizzato con C++/WinRT. Puoi sfruttare le informazioni fornite per creare controlli dell'interfaccia utente personalizzabili e ricchi di funzionalità.
Passaggio di parametri alle API proiettate C++/WinRT semplifica il passaggio di parametri alle API proiettate fornendo conversioni automatiche per i casi comuni.
Utilizzare componenti COM con C++/WinRT Questo argomento usa un esempio di codice Direct2D completo per illustrare l'uso di C++/WinRT per utilizzare classi e interfacce COM.
Creare componenti COM con C++/WinRT C++/WinRT non solo ti consente di creare classi di Windows Runtime, ma ti aiuta anche a creare componenti COM classici.
Passare a C++/WinRT da C++/CX Questo argomento descrive i dettagli tecnici relativi alla conversione del codice sorgente di un progetto C++/CX nell'equivalente in C++/WinRT.
Interoperabilità tra C++/WinRT e C++/CX Questo argomento illustra due funzioni helper che possono essere usate per eseguire la conversione tra oggetti C++/CX e C++/WinRT.
Asincronia e interoperabilità tra C++/WinRT e C++/CX Si tratta di un argomento avanzato relativo alla conversione graduale da C++/CX a C++/WinRT. Descrive come le attività e le coroutine della libreria PPL (Parallel Patterns Library) possono esistere affiancate nello stesso progetto.
Passare a C++/WinRT da WRL Questo argomento illustra come convertire il codice della Libreria modelli C++ per Windows Runtime (WRL) nell'equivalente in C++/WinRT.
Conversione dell'esempio Clipboard da C# a C++/WinRT—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. Per esercitarti e acquisire esperienza nella conversione, segui la procedura dettagliata e prova tu stesso a eseguire la conversione dell'esempio.
Passare a C++/WinRT da 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.
Interoperabilità tra C++/WinRT e ABI Questo argomento illustra come eseguire la conversione tra oggetti ABI (Application Binary Interface) e C++/WinRT.
Riferimenti sicuri e deboli 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.
Oggetti Agile Un oggetto Agile è un oggetto a cui è possibile accedere da qualsiasi thread. I tipi C++/WinRT sono Agile per impostazione predefinita, ma puoi scegliere di rifiutare esplicitamente.
Diagnosi delle allocazioni dirette 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.
Punti di estensione per i tipi di implementazione 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.
Un esempio base di libreria dell'interfaccia utente di Windows 2 in C++/WinRT (UWP) Questo argomento illustra nel dettaglio il processo di aggiunta di supporto semplice per la libreria dell'interfaccia utente di Windows (WinUI) in un progetto C++/WinRT. Nello specifico, questo argomento riguarda la libreria dell'interfaccia utente di Windows 2, dedicata alle applicazioni UWP.
Componenti Windows Runtime con 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.
Creazione di un componente Windows Runtime C# da usare da un'app C++/WinRT Questo argomento illustra nel dettaglio il processo di aggiunta del supporto semplice per l'interfaccia utente di Windows in un progetto C++/WinRT.
Visualizzazione del debug nativo di Visual Studio (natvis) per C++/WinRT L’estensione di Visual Studio C++/WinRT (VSIX) offre la visualizzazione del debug nativo di Visual Studio (natvis) dei tipi proiettati C++/WinRT. In questo modo si ottiene un'esperienza simile al debug di C#.
Macro di configurazione Questo argomento descrive le macro di configurazione di C++/WinRT.
Convenzioni di denominazione C++/WinRT Questo argomento illustra le convenzioni di denominazione stabilite da C++/WinRT.

Argomenti relativi al linguaggio C++

Argomento Descrizione
Categorie di valore e riferimenti Questo argomento descrive le varie categorie di valori presenti in C++. Oltre ai ben noti lvalue e rvalue, esistono altri tipi di valori.

API importanti