C++/CLI en 10 min

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).
Pour commencer

Partie 1: Rappels C++

Leave a Reply