Unmanaged and Managed Code : Introduction

Salut, Dans cette série d’article Managed and Unmanaged Code, nous parlerons beaucoup plus de l’interopérabilité entre les langages C/C++ et C#, et vu que nous parlons de série d’article on se doit de donner les différentes parties, qui sont : Introduction, Call Win32 APIs in C#, Call Unmanaged code with PInvoke, Call Unmanaged code with C++/CLI.

Voilà donc dans cette première partie « Unmanaged and Managed Code : Introduction » dans lequel on allons essayer de démontrer les différences et les possibilités de ces deux mondes.

Différence entre le code managé et non managé

Cette question est la clé qui vous permettra de comprendre tout le reste et son intérêt sans problème. Et nous allons y répondre brièvement mais clairement.

  • Le code managé dans notre cas est tout simplement du code qui s’exécute sous le CLR (Common Language Runtime) ou encore en français « Ramasseur des miettes », le CLR se charge de nous libérer automatiquement l’espace allouée non utilisé donc des objets que nous avons instanciés mais qui tout au long de l’exécution ne sont plus utilisé, et voici comment est compiler le code sur .NET :

C#, VB.NET, F# > MSIL (Microsoft Intermediate Language) > CLR compile vers du code natif directement exécutable sur le CPU.

  • Le code non managé aussi souvent appelé code non sécurisé parce qu’on touche directement la mémoire la compilation d’un code non manage n’a pas d’intermédiaire il s’exécute directement sur le CPU.

Une autre caractéristique est qu’avec du code non managé quand on alloue de la mémoire nous sommes contraint de toujours veiller à la libérer aussitôt fini de l’utiliser d’où l’importance du destructeur en C++, en C++ nous sommes obligées d’implémenter le destructeur pour chaque classe que nous définissons mais c’est carrément le contraire dans le code managé car cela se fait implicitement grâce à des interfaces comme IDisposable qui est implémenter déjà par les hautes classes  mais vous pouvez aussi le faire explicitement bien sûr puisque c’est une interface.

Comment interagit le code managé avec le non managé ?

Personnellement la meilleure façon de répondre à cette question est d’énumérer les chemins ou méthodes nous permettant de faire interagir ces deux mondes.

Nous avons, les plus connus et plus utiliséés :

  • Platform Invocation Services (PInvoke)
  • Programmation en Mode Mixte (C++\CLI)
  • COM Interoperability

Platform Invocation Services (PInvoke)

Consiste en l’exposition des APIs, des fonctions non managées comme des points d’entrées static dans une DLL (Dynamic Link Library), par un exemple plus concret le Win32 APIs qui consiste en des points d’entrée static modulaire tel que le USER32.dll, KERNEL32.dll, ADVAPI32.dll, nous les détaillerons beaucoup plus dans le prochain article.

Programmation en mode Mixte (C++\CLI)

Possible grâce au nouveau langage de Microsoft sur .NET qui vraiment puissant et personnellement même le plus grand langage du .NET car il vous permet de coder purement en manager avec toutes les classes .NET, purement en code non managé donc du code C/C++ pure et plus merveilleux encore mélanger les deux mondes ce qui permet au final d’encapsuler (wrapper) une classe non managé, native en managé.

COM Interoperability

Le COM Interoperability joue carrément le rôle de pont entre le COM et le code managé, et c’est quoi le COM, le COM est tout simplement l’ancêtre du .NET car existant depuis 1990 mais reste toujours utile à un certain niveau car contient toujours quelques API très intéressantes.

Voilà tout pour cette introduction et à plus dans un nouvel article sur comment utiliser les APIs Win32.

About Dan Kyungu

Check Also

TaskCompletionSource:Create Async functions on based event APIs

Dans cette article qui est en quelque sorte une seconde partie de TaskCompletionSource Fundamentals, nous …

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *