Cosa sono C ++ / CX e C ++ / CLI e come si relazionano con C ++ e WinRT?


31

Stavo pensando di raccogliere la sfida dell'apprendimento del C ++ per la progettazione di app Metro ed è stato allora che mi sono imbattuto in C ++ / CX.

Le app Metro possono essere codificate in C ++ 11? Richiedono C ++ / CX per funzionare? E cos'è esattamente C ++ / CX? È possibile creare un'app Metro usando solo C ++ o è richiesto C ++ / CX? Inoltre, come si lega C ++ / CLI a questa immagine?


Anche l'uso di C ++ / CX è ora sconsigliato (si preferisce C ++ / WinRT), consultare la documentazione
SWdV,

Risposte:


28

Microsoft era solita creare un sistema C ++ che ti consentisse di accedere alla loro API di Windows (chiamata win32), quindi un giorno hanno inventato .NET e hanno pensato che tutto dovesse cambiare.

Così hanno creato "Managed Extensions for C ++" che era sostanzialmente C ++ ma con un carico di estensioni non standard, aggiungendo parole chiave come il __gcsupporto di funzionalità .NET (come l'allocazione sull'heap GC anziché su quello nativo)

Ma alla gente non piaceva come non era in realtà; t C ++, con tutte quelle parole chiave extra, quindi Microsoft lo ridisegnò e lo chiamò C ++ / CLI, che aveva un set molto più piccolo di parole chiave aggiuntive ma introdusse cambiamenti di sintassi come il ^(che è un 'puntatore' di riferimento a un oggetto .NET sull'heap GC).

Qualche anno dopo, Microsoft ha capito che .NET non è il proiettile d'argento che hanno detto che fosse, e hanno anche unito i loro team Windows e Developer in conflitto. Parte di questa rivalutazione ha portato alla creazione di una nuovissima API di Windows, chiamata WinRT, che è interamente codice nativo e questo significava che le vecchie estensioni non erano più utili, quindi Microsoft ha sviluppato le proprie estensioni C ++ in una che ha reso il lavoro con il nuovo API WinRT più semplice - mantenendo alcune estensioni da C ++ / CLI (come ^).

Quindi - ecco qua, 3 diverse versioni di un C ++ esteso che è superficialmente C ++. Almeno l'ultima versione è di nuovo codice nativo, quindi non è necessario utilizzare le estensioni se non lo si desidera in quanto è possibile accedere direttamente all'API (si chiama WRL ed è molto simile alle vecchie classi di modelli ATL)

Se ritieni di poter codificare il codice multipiattaforma che non vorrai - puoi cambiare le chiamate API, ma non puoi usare ^su nessun compilatore diverso da Visual C ++. Consiglio di utilizzare l'API WRL e di mantenere il codice il più standard possibile, dato il 'codice extra' che dovresti scrivere rispetto a C ++ / CX non è eccezionale.


Nota: C ++ / CX non è menzionato fino alla fine; sarebbe bello dire esplicitamente quale è nel suo paragrafo.
Ghianda

11

Citando http://blogs.msdn.com/b/vcblog/archive/2012/08/29/cxxcxpart00anintroduction.aspx :

. . . mentre C ++ / CX è sintatticamente simile a C ++ / CLI e quindi sembra quasi lo stesso in molti modi, è semanticamente abbastanza diverso. Il codice C ++ / CX è un codice nativo, non è richiesto alcun CLR. La programmazione in C ++ / CLI può essere molto impegnativa, poiché è necessario destreggiarsi abilmente contemporaneamente due modelli di oggetti molto diversi: il modello di oggetti C ++ con le sue vite di oggetti deterministici e il modello di oggetti CLI raccolto dalla spazzatura. C ++ / CX è molto più semplice da utilizzare, poiché Windows Runtime, basato su COM, si associa molto bene al linguaggio di programmazione C ++.

Windows Runtime definisce un'interfaccia binaria di applicazione (ABI) relativamente semplice e di basso livello e obbliga i componenti a definirne i tipi utilizzando un formato di metadati comune. C ++ / CX non è strettamente richiesto per scrivere un componente nativo di Windows Runtime: è possibile scrivere componenti di Windows Runtime utilizzando C ++ senza utilizzare le estensioni del linguaggio C ++ / CX e Visual C ++ 2012 include una libreria, la libreria di modelli C ++ di Windows Runtime ( WRL), per facilitare questo. Molti dei componenti di Windows Runtime forniti come parte di Windows (nello spazio dei nomi di Windows) sono scritti utilizzando WRL. Non c'è magia in C ++ / CX: rende la scrittura dei componenti di Windows Runtime in C ++ molto, molto più semplice e aiuta a ridurre la quantità di codice ripetitivo e dettagliato che dovresti scrivere quando usi una soluzione basata su libreria come WRL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.