Manipuler les buffers d'une librairie non-managée en C#
En C#, un langage managé, utiliser une dll qui prends un buffer en paramètre n’est pas évident au premier abord : il n’y a pas de notion de pointeur dans un langage managé puisque le garbage collector est seul maitre de la mémoire. Ainsi, si votre dll prends un pointeur sur un tableau de caractère (un buffer alloué qu’il va remplir et que vous souhaitez par la suite manipuler), vous devez trouver une solution pour faire passer votre tableau C# pour un pointeur sur un tableau de char. Plusieurs solutions existent, celle-ci a le mérite de ne pas à utiliser la clause unsafe.
Il s’agit de marshalling ou sérialisation binaire. On prends un tableau de byte csharp, et on le transmet comme un pointeur sur un tableau non managé. Le code est plutôt simple d’accès, quelques explication en dessous :

Commentaires récents