Sommaire

Réalisation d’un wrapper

Dans les sections précédentes, le codage de l’accès aux fonctions des DLL n’est pas optimal. En effet, l’adresse de la fonction C/C++ est évaluée à chaque appel et il n’y a pas de notion d’instance utilisateur dans la DLL. Pour remédier à cela, le développeur C# pourra créer une classe dite " wrapperwrapper" qui va :

  • proposer un jeu de méthodes permettant de charger/décharger la DLL non managée et de récupérer les adresses de ses fonctions exportées,

  • proposer un jeu de méthodes C# adaptées pour communiquer avec les fonctions non managées.

Le wrapper peut faire l’objet d’une assembly "à part". C’est généralement le cas pour les périphériques programmables. Le fabricant met à disposition des développeurs un wrapper sous forme d’une assembly, donc d’une DLL, qu’il suffit de référencer dans le projet pour pouvoir l’utiliser.

Par souci de simplification, le wrapper de notre exemple apparaît dans le projet C# sous forme d’une classe (projet PInvoke08 à télécharger).

La DLL native à "wrapper" est très simple. Elle contient deux fonctions : l’une récupère et sauve une valeur alors que la seconde la restitue.

#include "stdafx.h" 
#include <stdio.h> 
#include ...