PARTIE 1 | PARTIE 2 | PARTIE 3 | PARTIE 4 | ||
---|---|---|---|---|---|
Préambule | Rappels C++ | Caractéristiques générales | Syntaxe de base | Syntaxe détaillée | Références |
Le C++/CLI (CLI pour Common Language Infrastructure) est une technologie Microsoft qui permet de manipuler et d’appeler du code natif en C ou en C++ à partir de code managé .NET.
Il s’agit d’un langage qui mélange C++ et technologie .NET.
Il peut arriver dans un projet, qu’on doivent faire cohabiter du code non managé et du code managé car:
Il peut être nécessaire d’effectuer des appels à une API native pour laquelle il n’existe pas d’implémentation en .NET.
On peut aussi avoir une grande quantité de code natif historique et qu’il est trop couteux de le migrer entièrement en .NET.
On a effectué le choix d’implémenter certains traitements en code natif pour des besoins en performance. Le reste du code, étant moins soumis à une contrainte de performance peut être implémenté en C#.
Le choix d’utiliser le C++/CLI pour appeler du code non managé à partir de code managé peut être judicieux car on profite du confort d’un langage managé .NET associée à la flexibilité, parfois recherchée, du langage C++. D’autre part, il est souvent la solution la plus efficace si on recherche de bonnes performances d’exécution.
Il existe d’autres méthodes pour appeler du code non managé à partir de code managé:
- COM interop: cette technique convient si on doit faire appel à des composants COM.
- Platform invoke: cette méthode est la plus adaptée lorsque le code managé ne change pas beaucoup ou que l’interface entre le code managé et le code non managé est assez figé. Elle peut facilement provoquer des erreurs toutefois, elle est généralement rapide à mettre en place. Plus de détails sur ce type d’appel dans Platform invoke en 5 min.
Les inconvénients d’utiliser le C++/CLI sont:
- Le langage ne met pas l’abri d’erreurs de programmation liée à la gestion de la mémoire lorsqu’on écrit du code C++ natif. On peut toutefois réduire au maximum la manipulation d’objets C++ au profit d’objets managés.
- Le C++/CLI nécessite l’apprentissage d’un langage supplémentaire car il est différent du C++ pur.
- Le langage ne permet pas d’utiliser toutes les fonctionnalités .NET comme en C#. Par exemple, les expressions lambdas ne sont pas implémentables en C++/CLI ce qui peut rendre plus compliqué l’utilisation de Task Parallel Library (TPL) ou Moq (pour implémenter des tests unitaires).
Partie 1: Rappels C++
Généralités sur les pointeurs et les références
Objets de type valeur
Objets de type référence
Objets en C++
Allocation des objets en mémoire
Partie 2: Caractéristiques générales du C++/CLI
Mise en oeuvre pour coder en C++/CLI
Détails des options d’un projet C++/CLI
Transitions entre des objets managés et des objets non managés
Partie 3: Syntaxe des éléments de base
Définition et instanciation des objets
Opérateur “address-of” et de déférencement
Constructeur
Destructeur et “finalizer”
Passage des objets en argument
Construction d’objets mixtes
Partie 4: Détails de la syntaxe du C++/CLI
nullptr
typedefs
namespace
Héritage
Méthode statique et classe statique
Classe abstraite
Interface
Les chaines de caractères
Casts
Equivalent à typeof()
Tableaux
Propriétés
Les exceptions
Delegates
Evènements
Templates et generics