Il est né ?
Vous êtes ici : mk0phpgtk.xgarreau.org >> aide >> devel >> dll : Création de DLL en VC++
Version imprimable

Création de DLL en VC++

Ici, vous trouverez la méthode pour construire une DLL à l'aide de Visual C++. Quand on connaît la recette, il est aisé de changer de casserole. La transcription en d'autres langages ne posera donc pas de problèmes majeurs.



Comme pour tout autre "module", il faut commencer par écrire un code source. Ici ce sera un fichier .cpp. Créer votre fichier comme une librairie classique(groupe de fonctions, variables...). sauf que vous vous servez de l'icône spécifique au DLLs dans la fenêtre File.../New..../Onglet Projects. Imaginons que vous définissiez une fonction nommée TrucBidule retournant un carctère et sans arguments en entrée et que ce soit la seule de la DLL, nommée TestDLL.

Ensuite, il faut créer un fichier .def précisant le nom de la DLL et des fonction qui y sont contenues. Je vous conseille de donner le même nom à la DLL et au fichier .def, ça facilite la maintenance de votre projet. Voici la tête du fichier .def :

; fichier de definition de la DLL TestDLL : TestDLL.def

LIBRARY TestDLL   ;Nom de la DLL

CODE PRELOAD OVEABLE DISCARDABLE
DATA PRELOAD SINGLE

EXPORTS
   TrucBidule   ;Nom des fonctions de la DLL

Bien, rien qu'avec ça, vous avez créé une DLL.

Vous voulez l'utiliser ? L'appel d'une DLL :

Insérer quelques lignes dans un programme quelconque nécessitant la dite fonction de la sus-nommée DLL :

HINSTANCE DLLHandle;
// Utile pour garder le Handle de la DLL.

typedef char (*TrucBidulePointeurType)();
// Déclare un type pointeur pointant une fonction
// retournant un caractère et ne prenant pas d'arguments en entrée.

TrucBidulePointeurType TrucBidulePointeur;
// Déclare un pointeur du type sus-défini...

Puis dans la fonction nécessitant la dite fonction dans la DLL créée :

DLLHandle = LoadLibrary("TestDLL.DLL");
// Ouvrons la bibliothèque et offrons son HANDLE à DLLHandle

TrucBidulePointeur = (TrucBidulePointeurType)GetProcAddress(DLLHandle,"TrucBidule");
// Affectons l'adresse de la fonction que l'on désire utiliser au pointeur créé pour çà !

char c;
c = TrucBidulePointeur();
// Récupérons la valeur retour de la fonction pointée par TrucBidulePointeur.
// Si on avait d'autres fonctions à utiliser, on répèterait l'assignation d'adresse de la fonction 
// au pointeur.
// Exemple :TrucBidulePointeur = (TrucBidulePointeurType)GetProcAddress(DLLHandle,"TrucBidule2");

Et là, vous vous retrouvez avec le résultat de la fonction TrucBidule dans la variable c. Après, vous n'en faites qu'est ce que vous le voulez...

a+

Auteur : Xavier GARREAU
Modifié le 22.09.2004

Rechercher :

Google
 
Web www.xgarreau.org