Extensions de composants pour .NET et UWP

Le langage C++ standard permet aux fournisseurs de compilateur de fournir des extensions non standard au langage. Microsoft fournit des extensions pour vous aider à connecter du code C++ natif à du code qui fonctionne sur .NET Framework ou la plateforme Windows universelle (UWP). Les extensions .NET sont appelées C++/CLI et produisent du code qui fonctionne dans l’environnement d’exécution managé .NET appelé le common language runtime (CLR). Les extensions UWP sont appelées C++/CX et produisent du code machine natif.

Remarque

Pour les nouvelles applications, nous recommandons l’utilisation de C++/WinRT plutôt que C++/CX. C++/ WinRT est une nouvelle projection du langage C++17 standard pour les API Windows Runtime. Nous continuerons de prendre en charge les langages C++/CX et WRL, mais recommandons vivement l’utilisation du langage C++/WinRT avec des nouvelles applications. Pour plus d’informations, consultez C++/WinRT.

Deux runtimes, un ensemble d’extensions

C++/CLI étend la norme ISO/ANSI C++. Sa définition entre dans la norme Ecma C++/CLI. Pour plus d’informations, consultez Programmation .NET avec C++/CLI (Visual C++).

Les extensions C++/CX représentent un sous-ensemble de C++/CLI. Bien que la syntaxe d’extension soit identique dans la plupart des cas, le code généré sera différent selon si vous spécifiez l’option de compilateur /ZW pour cibler UWP, ou l’option /clr pour cibler .NET. Ces commutateurs sont définis automatiquement quand vous utilisez Visual Studio pour créer un projet.

Mots clés de type de données

Les extensions de langage incluent des mots clés d’agrégation, constitués de deux jetons séparés par un espace blanc. Les jetons peuvent avoir une signification précise quand ils sont utilisés séparément et une autre signification quand ils sont utilisés ensemble. Par exemple, le mot « ref » est un identificateur ordinaire et le mot « class » est un mot clé qui déclare une classe native. Mais quand ces mots sont combinés pour former ref class, le mot clé d’agrégation obtenu permet de déclarer une entité connue en tant que classe runtime.

Les extensions incluent également des mots clés contextuels. Un mot clé est considéré comme contextuel en fonction du type d'instruction qui le contient et de son positionnement dans cette instruction. Par exemple, le jeton « property » peut être un identificateur ou il peut déclarer un type spécial de membre de classe publique.

Le tableau suivant répertorie les mots clés de l'extension du langage C++.

Mot clé Contextuel Objectif Référence
ref class

ref struct
Non Déclare une classe. Classes et structs
value class

value struct
Non Déclare une classe de valeur. Classes et structs
interface, classe

interface struct
Non Déclare une interface. interface, classe
enum, classe

enum struct
Non Déclare une énumération. enum, classe
property Oui Déclare une propriété. propriété
delegate Oui Déclare un délégué. délégué (C++/CLI et C++/CX)
event Oui Déclare un événement. event

Spécificateurs de substitution

Vous pouvez utiliser les mots clés suivants pour qualifier le comportement de substitution pour la dérivation. Bien que le mot clé new ne soit pas une extension de C++, il est répertorié ici car il peut être utilisé dans un autre contexte. Certains spécificateurs sont également valides pour la programmation native. Pour plus d’informations, consultez Comment : déclarer des spécificateurs de substitution dans les compilations natives (C++/CLI).

Mot clé Contextuel Objectif Référence
abstract Oui Indique que les fonctions ou classes sont abstraites. abstract
new Non Indique qu'une fonction n'est pas une substitution d'une version de la classe de base. new (nouvel emplacement dans vtable)
override Oui Indique qu'une méthode doit être une substitution d'une version de la classe de base. override
sealed Oui Empêche les classes d'être utilisées comme classes de base. sealed

Mots clés pour les génériques

Les mots clés suivants ont été ajoutés pour prendre en charge des types génériques. Pour plus d’informations, consultez Génériques.

Mot clé Contextuel Objectif
generic Non Déclare un type générique.
where Oui Spécifie les contraintes appliquées à un paramètre de type générique.

Mots clés divers

Les mots clés suivants ont été ajoutés aux extensions C++.

Mot clé Contextuel Objectif Référence
finally Oui Indique le comportement de gestion des exceptions par défaut. Gestion des exceptions
for each, in Non Énumère les éléments d’une collection. for each, in
gcnew Non Alloue des types sur le tas récupéré par le garbage collector. À utiliser à la place de new et de delete. ref new, gcnew
ref new Oui Alloue un type Windows Runtime. À utiliser à la place de new et de delete. ref new, gcnew
initonly Oui Indique qu’un membre peut uniquement être initialisé lors de la déclaration ou dans un constructeur statique. initonly (C++-CLI)
literal Oui Crée une variable littérale. literal
nullptr Non Indique qu'un handle ou pointeur ne pointe pas vers un objet. nullptr

Constructions de modèle

Les constructions de langage suivantes sont implémentées comme modèles, plutôt que comme mots clés. Si vous spécifiez l'option de compilateur /ZW, elles sont définies dans l'espace de noms lang. Si vous spécifiez l'option de compilateur /clr, elles sont définies dans l'espace de noms cli.

Mot clé Objectif Référence
array Déclare un tableau. Tableaux
interior_ptr (CLR uniquement) Pointe vers des données dans un type de référence. interior_ptr (C++-CLI)
pin_ptr (CLR uniquement) Pointe vers des types de référence CLR pour supprimer temporairement le système de garbage collection. pin_ptr (C++-CLI)
safe_cast Détermine et exécute la méthode de casting optimale pour un type de runtime. safe_cast
typeid (CLR uniquement) Récupère un objet System.Type qui décrit le type ou l'objet donné. typeid

Déclarateurs

Les déclarateurs de type suivants demandent au runtime de gérer automatiquement la durée de vie et la suppression des objets alloués.

Opérateur Objectif Référence
^ Déclare un handle à un objet ; autrement dit, un pointeur vers un objet Windows Runtime ou CLR qui est automatiquement supprimé quand il n’est plus utilisable. Handle sur l'opérateur Object (^)
% Déclare une référence de suivi ; autrement dit, une référence vers un objet Windows Runtime ou CLR qui est automatiquement supprimé quand il n’est plus utilisable. Opérateur de référence de suivi

Cette section répertorie les constructions de programmation supplémentaires, ainsi que les rubriques qui se rapportent au CLR.

Sujet Description
__identifier (C++-CLI) (Windows Runtime et CLR) Permet d’utiliser des mots clés en tant qu’identificateurs.
Listes d’arguments de variable (...) (C++-CLI) (Windows Runtime et CLR) Permet à une fonction de prendre un nombre variable d’arguments.
Équivalents .NET Framework des types natifs C++ (C++-CLI) Répertorie les types CLR qui sont utilisés à la place des types intégraux C++.
modificateur __declspec appdomain Modificateur __declspec qui impose que des variables statiques et globales existent par appdomain.
Casts de style C avec /clr (C++/CLI) Décrit comment les casts de style C sont interprétées.
Convention d’appel __clrcall Indique la convention d’appel conforme au CLR.
__cplusplus_cli Macros prédéfinies
Attributs personnalisés Décrit comment définir vos propres attributs CLR.
Gestion des exceptions Fournit une vue d'ensemble de la gestion des exceptions.
Substitutions explicites Montre comment les fonctions membres peuvent substituer les membres arbitraires.
Assemblys friend (C++) Explique comment un assembly client peut accéder à tous les types dans un composant d'assembly.
Boxing Montre les conditions dans lesquelles les types de valeur sont boxed.
Prise en charge du compilateur pour les Type Traits Explique comment détecter les caractéristiques des types au moment de la compilation.
Pragmas managés, non managés Montre comment les fonctions managées et non managées peuvent coexister dans le même module.
modificateur du __declspecprocessus Modificateur __declspec qui impose que des variables statiques et globales existent par process.
Réflexion (C++-CLI) Montre la version CLR des informations de type au moment de l'exécution.
Chaîne Décrit la conversion du compilateur des littéraux de chaîne en String.
Transfert de type (C++-CLI) Permet le déplacement d'un type dans un assembly d'expédition vers un autre assembly afin que le code client n'ait pas besoin d'être recompilé.
Attributs définis par l'utilisateur Montre les attributs définis par l'utilisateur.
Directive #using Importe des assemblys externes.
Documentation XML Explique la documentation du code XML à l’aide de /doc (Traiter les commentaires de documentation) (C/C++).

Voir aussi

Programmation .NET avec C++/CLI (Visual C++)
Interopérabilité native et .NET