Que sont C ++ / CX et C ++ / CLI, et comment sont-ils liés à C ++ et WinRT?


31

J'envisageais de relever le défi d'apprendre le C ++ pour concevoir des applications Metro et c'est à ce moment que j'ai rencontré C ++ / CX.

Les applications Metro peuvent-elles être codées en C ++ 11? Ont-ils besoin de C ++ / CX pour fonctionner? Et qu'est-ce que C ++ / CX exactement? Est-il possible de créer une application Metro en utilisant uniquement C ++, ou est-ce que C ++ / CX est requis? De plus, comment C ++ / CLI est-il lié à cette image?


L'utilisation de C ++ / CX est également déconseillée maintenant (C ++ / WinRT est préférable), voir la documentation
SWdV

Réponses:


28

Microsoft fabriquait simplement un système C ++ qui vous permettait d'accéder à son API Windows (appelée win32), puis un jour, ils ont inventé .NET et ont pensé que tout devait changer.

Ils ont donc créé des "extensions gérées pour C ++" qui étaient essentiellement du C ++ mais avec une charge d'extensions non standard, ajoutant des mots clés comme __gcpour prendre en charge les fonctionnalités .NET (comme l'allocation sur le tas GC plutôt que natif)

Mais les gens n'aimaient pas cela car ce n'était vraiment pas le cas; t C ++, ayant tous ces mots clés supplémentaires, alors Microsoft l'a repensé et l'a appelé C ++ / CLI, qui avait un ensemble beaucoup plus petit de mots clés supplémentaires mais a introduit des changements de syntaxe comme le ^(qui est un «pointeur» de référence vers un objet .NET sur le tas GC).

Quelques années plus tard, Microsoft a réalisé que .NET n'était pas la solution miracle qu'ils l'avaient dit, et ils ont également fusionné leurs équipes Windows et Developer en lutte. Une partie de cette réévaluation a conduit à la création d'une toute nouvelle API Windows, appelée WinRT, qui est entièrement en code natif et cela signifiait que les anciennes extensions n'étaient plus utiles, alors Microsoft a développé leurs extensions C ++ pour en faire une qui rendait le travail avec le nouveau API WinRT plus facile - en conservant quelques extensions de C ++ / CLI (comme le ^).

Donc - voilà, 3 versions différentes d'un C ++ étendu qui est superficiellement C ++. Au moins, la dernière version est à nouveau du code natif, vous n'avez donc pas besoin d'utiliser les extensions si vous ne le souhaitez pas car vous pouvez accéder directement à l'API (elle s'appelle WRL et ressemble beaucoup aux anciennes classes de modèles ATL)

Si vous pensez que vous codez du code multiplateforme, vous ne le voudrez pas - vous pouvez modifier les appels d'API, mais vous ne pouvez pas utiliser le ^sur un compilateur autre que Visual C ++. Je recommanderais d'utiliser l'API WRL et de garder votre code aussi standard que possible étant donné que le `` code supplémentaire '' que vous auriez besoin d'écrire par rapport à C ++ / CX n'est pas si bon.


Remarque: C ++ / CX n'est pas mentionné jusqu'à la fin; ce serait bien de dire explicitement lequel est dans son paragraphe.
Acorn

11

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

. . . Alors que C ++ / CX est syntaxiquement similaire à C ++ / CLI et semble donc presque le même à bien des égards, il est sémantiquement très différent. Le code C ++ / CX est un code natif, aucun CLR n'est requis. La programmation en C ++ / CLI peut être très difficile, car il faut jongler habilement avec deux modèles d'objets très différents en même temps: le modèle d'objet C ++ avec ses durées de vie déterministes et le modèle d'objet CLI récupéré. C ++ / CX est beaucoup plus simple à utiliser, car Windows Runtime, qui est basé sur COM, correspond très bien au langage de programmation C ++.

Windows Runtime définit une interface binaire d'application (ABI) relativement simple et de bas niveau, et oblige les composants à définir leurs types à l'aide d'un format de métadonnées commun. C ++ / CX n'est pas strictement requis pour écrire un composant Windows Runtime natif: il est tout à fait possible d'écrire des composants Windows Runtime à l'aide de C ++ sans utiliser les extensions de langage C ++ / CX, et Visual C ++ 2012 comprend une bibliothèque, la bibliothèque de modèles Windows Runtime C ++ ( WRL), pour vous faciliter la tâche. De nombreux composants Windows Runtime fournis avec Windows (dans l'espace de noms Windows) sont écrits à l'aide de WRL. Il n'y a pas de magie dans C ++ / CX: cela rend l'écriture des composants Windows Runtime en C ++ beaucoup, beaucoup plus simple et aide à réduire la quantité de code répétitif et verbeux que vous auriez à écrire lors de l'utilisation d'une solution basée sur une bibliothèque comme WRL.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.