Libreria modelli C++ per Windows Runtime

La libreria modelli C++ per Windows Runtime (WRL) è una libreria modello che offre un approccio di base per creare e usare componenti Windows Runtime.

Nota

WRL è ora sostituito da C++/WinRT, una proiezione di linguaggio C++17 standard per le API di Windows Runtime. C++/WinRT è disponibile in Windows SDK dalla versione 1803 (10.0.17134.0) successiva. C++/WinRT viene implementato interamente nei file di intestazione e progettato per fornire l'accesso di prima classe all'API di Windows moderna.

Con C++/WinRT puoi usare e creare API di Windows Runtime usando qualsiasi compilatore C++17 conforme agli standard. C++/WinRT offre in genere prestazioni migliori e produce file binari più piccoli rispetto a qualsiasi altra opzione del linguaggio per Windows Runtime. Microsoft continuerà a supportare C++/CX e WRL, ma è consigliabile usare C++/WinRT per le nuove applicazioni. Per altre informazioni, vedi C++/WinRT.

Vantaggi

La libreria di modelli C++ di Windows Runtime consente di implementare e utilizzare più facilmente i componenti COM (Component Object Model). Fornisce tecniche di pulizia come il conteggio dei riferimenti per gestire la durata degli oggetti e il test dei valori HRESULT per determinare se un'operazione ha avuto esito positivo o negativo. Per usare correttamente la libreria di modelli C++ di Windows Runtime, è necessario seguire attentamente queste regole e tecniche.

C++/CX è un modo di alto livello basato sul linguaggio per usare i componenti Windows Runtime. Sia la libreria di modelli C++ di Windows Runtime che C++/CX semplificano la scrittura di codice per Windows Runtime eseguendo automaticamente le attività di manutenzione per conto dell'utente.

La libreria di modelli C++ di Windows Runtime e C++/CX offrono vantaggi diversi. Ecco alcuni motivi per cui potresti voler usare la libreria di modelli C++ di Windows Runtime anziché C++/CX:

  • La libreria di modelli C++ di Windows Runtime aggiunge poche astrazioni sull'interfaccia ABI (Application Binary Interface) di Windows Runtime, offrendo la possibilità di controllare il codice sottostante per creare o utilizzare meglio le API di Windows Runtime.

  • C++/CX rappresenta i valori HRESULT COM come eccezioni. Se hai ereditato una codebase che usa COM o una che non usa eccezioni, potresti scoprire che la libreria di modelli C++ di Windows Runtime è un modo più naturale per lavorare con Windows Runtime perché non devi usare le eccezioni.

    Nota

    La libreria di modelli C++ di Windows Runtime usa valori HRESULT e non genera eccezioni. Inoltre, la libreria di modelli C++ di Windows Runtime usa puntatori intelligenti e il modello RAII per garantire che gli oggetti vengano eliminati correttamente quando il codice dell'applicazione genera un'eccezione. Per altre info sui puntatori intelligenti e RAII, vedi Puntatori intelligenti e oggetti di proprietà (RAII).

  • Lo scopo e la progettazione della libreria di modelli C++ di Windows Runtime sono ispirati a Active Template Library (ATL), che è un set di classi C++ basate su modello che semplificano la programmazione di oggetti COM. Poiché la libreria di modelli C++ di Windows Runtime usa C++ standard per eseguire il wrapping di Windows Runtime, è possibile convertire e interagire più facilmente con molti componenti COM esistenti scritti in ATL in Windows Runtime. Se si conosce già ATL, è possibile che la programmazione della libreria di modelli C++ di Windows Runtime sia più semplice.

Introduzione

Ecco alcune risorse che consentono di lavorare subito con la libreria di modelli C++ di Windows Runtime.

Procedura: Attivare e usare un componente Windows Runtime
Illustra come usare la libreria di modelli C++ di Windows Runtime per inizializzare Windows Runtime e attivare e usare un componente Windows Runtime.

Procedura: Completare operazioni asincrone
Illustra come usare la libreria di modelli C++ di Windows Runtime per avviare operazioni asincrone ed eseguire operazioni al termine delle operazioni.

Procedura: Gestire gli eventi
Illustra come usare la libreria di modelli C++ di Windows Runtime per sottoscrivere e gestire gli eventi di un oggetto Windows Runtime.

Procedura dettagliata: creazione di un'app UWP tramite WRL e Media Foundation
Scopri come creare un'app UWP che usa Microsoft Media Foundation.

Procedura: Creare un componente COM classico
Illustra come usare la libreria di modelli C++ di Windows Runtime per creare un componente COM di base e un modo di base per registrare e utilizzare il componente COM da un'app desktop.

Procedura: Creare direttamente un'istanza dei componenti WRL
Informazioni sull'utilizzo delle funzioni Microsoft::WRL::Details::MakeAndInitialize e Microsoft::WRL::Make per creare un'istanza di un componente dal modulo che lo definisce.

Procedura: Usare winmdidl.exe e midlrt.exe per creare file con estensione h dai metadati di Windows
Viene illustrato come utilizzare i componenti personalizzati di Windows Runtime da WRL creando un file IDL dai metadati di .winmd.

Procedura dettagliata: connessione tramite attività e richieste HTTP XML
Illustra come usare le interfacce IXMLHTTPRequest2 e IXMLHTTPRequest2Callback insieme alle attività per inviare richieste HTTP GET e POST a un servizio Web in un'app UWP.

Esempio di Bing Maps Trip Optimizer
Usa la HttpRequest classe definita in Procedura dettagliata: Connessione tramite attività e richieste HTTP XML nel contesto di un'app UWP completa.

Creazione di un componente DLL di Windows Runtime con l'esempio C++
Illustra come usare la libreria di modelli C++ di Windows Runtime per creare un componente DLL in-process e usarlo da C++/CX, JavaScript e C#.

Esempio di gioco DirectX marble maze
Illustra come usare la libreria di modelli C++ di Windows Runtime per gestire la durata dei componenti COM, ad esempio DirectX e Media Foundation, nel contesto di un gioco 3D completo.

Notifiche di tipo avviso popup dalle app desktop.
Illustra come inviare notifiche di tipo avviso popup da un'app desktop.

Libreria di modelli C++ di Windows Runtime rispetto ad ATL

La libreria di modelli C++ di Windows Runtime è simile ad ATL (Active Template Library) perché è possibile usarla per creare oggetti COM piccoli e veloci. Libreria modelli C++ di Windows Runtime e ATL condividono anche concetti come la definizione di oggetti nei moduli, la registrazione esplicita delle interfacce e la creazione aperta di oggetti usando factory. Se hai familiarità con ATL, potresti avere familiarità con la libreria di modelli C++ di Windows Runtime.

La libreria di modelli C++ di Windows Runtime supporta la funzionalità COM necessaria per le app UWP. Di conseguenza, differisce da ATL in quanto non include il supporto diretto alle funzionalità COM come:

  • aggregazione

  • implementazioni predefinite

  • interfacce duali (IDispatch)

  • interfacce dell'enumeratore standard

  • punti di connessione

  • interfacce tear-off

  • incorporamento OLE

  • Controlli ActiveX

  • COM+

Concetti

La libreria di modelli C++ di Windows Runtime fornisce tipi che rappresentano alcuni concetti di base. Nelle seguenti sezioni vengono descritti questi tipi.

ComPtr

ComPtr è un tipo di puntatore intelligente che rappresenta l'interfaccia specificata dal parametro di modello. Utilizzare ComPtr per dichiarare una variabile che può accedere ai membri di un oggetto derivato dall'interfaccia. ComPtr mantiene automaticamente un conteggio dei riferimenti per un puntatore di interfaccia sottostante e rilascia l'interfaccia quando il conteggio dei riferimenti va a zero.

RuntimeClass

RuntimeClass rappresenta una classe di cui è stata creata un'istanza che eredita un set di interfacce specificate. Un RuntimeClass oggetto può fornire una combinazione di supporto per una o più interfacce COM di Windows Runtime o un riferimento debole a un componente.

Modulo

Modulo rappresenta una raccolta di oggetti correlati. Un oggetto Module gestisce le class factory, che creano oggetti, e la registrazione, che consente alle altre applicazioni di utilizzare un oggetto.

Richiamata

La funzione Callback crea un oggetto la cui funzione membro è un gestore eventi (un metodo di callback). Utilizzare la funzione Callback per scrivere operazioni asincrone.

EventSource

EventSource viene utilizzato per gestire i gestori eventi del delegato . Usare la libreria di modelli C++ di Windows Runtime per implementare un delegato e usare EventSource per aggiungere, rimuovere e richiamare delegati.

AsyncBase

AsyncBase fornisce metodi virtuali che rappresentano il modello di programmazione asincrona di Windows Runtime. Eseguire l'override dei membri di questa classe per creare una classe personalizzata che consente di avviare, arrestare o controllare lo stato di avanzamento di un'operazione asincrona.

FtmBase

FtmBase rappresenta un oggetto di gestore del marshalling con modello di threading Free. FtmBase crea una tabella globale (GIT) dell'interfaccia e aiuta a gestire il marshalling e gli oggetti proxy.

WeakRef

WeakRef è un tipo di puntatore intelligente che rappresenta un riferimento deboleche fa riferimento a un oggetto che potrebbe essere accessibile o meno. Un WeakRef oggetto può essere usato solo da Windows Runtime e non da COM classico.

Un oggetto WeakRef in genere rappresenta un oggetto la cui esistenza è controllata da un thread o da un'applicazione esterna. Ad esempio, un oggetto WeakRef può fare riferimento a un oggetto file. Quando il file viene aperto, WeakRef è valido e il file a cui si fa riferimento è accessibile. Ma quando il file viene chiuso, WeakRef non è valido e il file non è accessibile.

API chiave per categoria
Evidenzia i tipi, le funzioni e le macro principali della libreria di modelli C++ di Windows Runtime.

Riferimento
Contiene informazioni di riferimento per la libreria di modelli C++ di Windows Runtime.

Riferimento rapido (C++/CX)
Descrive brevemente le funzionalità C++/CX che supportano Windows Runtime.

Uso di componenti Windows Runtime in Visual C++
Illustra come usare C++/CX per creare un componente Windows Runtime di base.