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 ad API proiettate | C++/ WinRT semplifica il passaggio di parametri ad 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. |