Vous êtes sur la page 1sur 5

Tutorial : Utiliser des DLL

1- Introduction aux DLL (intrts, avantages, etc.)


2- Construire sa DLL
3- Construire le Programme client
4- Utilisation dynamique dune DLL

CHAPITRE 1 -> Introduction aux DLL


Les DLL, ce sont des appendices. Oui, des appendices. Je vais aller droit au but :
Leur but est tout simplement dallger votre programme. Comment ? Eh bien imaginez que
vous dveloppiez un jeu vido ou une grosse application : vous navez jamais vu un tel
programme fonctionner uniquement seul. Jentends par l que le programme avait tout plein
de fichiers alentours avec des extensions diverses.
Eh bien lune des plus importantes dont il avait besoin est la *.dll. Pourquoi ? Car cest un
morceau du programme. Vous me direz alors, Quel est lintrt de faire cela, si ce nest que
lon peut ne plus arriver le faire fonctionner normalement ? .
Son intrt rside, par exemple, dans le fait dune update du programme : vous ne vous
imaginez pas tlcharger lapplication entire tout a pour un bug ou deux de corrig !
Eh bien, en fait les dveloppeurs nauront alors besoin que d upgrader une ou deux DLL
et le fichier EXE. Alors, au lieu davoir 200/300/400 Mo tlcharger, vous nen navez que
quelques uns !
Toujours pas convaincu ?
Lautre argument fort rside dans le fait du partage. Eh oui, un dveloppeur qui aura rivalis
de gnie et invent plein de nouvelles fonctions dont vous auriez bien besoin, nira pas vous
donner ses sources ! Eh bien, il lui suffit de mettre tout cela dans un fichier *.dll et l,
magique, il peut vous la donner car vous avez en face de vous un semblable dEXE, donc, a

part si vous le dsassemblez, il ny a pas de risque de vol pour lui, et il peut en faire profiter
tout le monde.
Encore pas convaincu ?
Ben l, je peux que vous dire une seule chose : quelque soit lenvironnement de
dveloppement sous lequel vous dveloppez, vous devez savoir-faire des DLL (ou leurs
quivalents sous Linux, Posix, Solaris..)

CHAPITRE 2 -> Construire sa DLL


Alors l, pas dur du tout !
Le seul pr-requis quil vous faut : des bonnes bases du C++ (ben de tout manire, si vous en
tes la prog des DLL, cest que vous les avez)
Je commence tout de suite par un exemple de code de DLL vierge :
#include "stdafx.h" //i vous tes sous VC++
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Voyez, ce nest pas compliqu ? En revanche, napprenez pas ce bout de code par cur :
Dans la programmation dune DLL, on se fiche compltement de son existence (cependant,
elle lui est quand mme indispensable) !
A prsent, on ne chme pas, je vais vous montrer comment implmenter une fonction qui sera
exportable dans le programme client . Je veux dire quoi par exportable : eh bien utiliser
la DLL ce pour quoi elle est faite ! Dsol, je ne peux pas vous expliquer la dfinition de
exporter , a se trouve dans un dico.
Je vous montre le code puis je vous lexplique aprs :

#include "stdafx.h" // si vous tes sous VC++


BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extern "C" __declspec(dllexport) int addition(int a,int b)
{
return a+b;
}
Quest-ce que ce charabia ? Moi, je connais les fonctions mais pas tout ces prfixes l ! A quoi
servent-ils ?
Alors, pour une DLL, le plus important des prfixes, pour les fonctions exportables, cest :
extern "C" __declspec(dllexport)
En fait, comme vous le voyez, il ny en a quun seul. Ce prfixe dit la DLL que cette
fonction peut tre appele par un programme extrieur (cf. : partage).
Maintenant, vous savez que lors de la cration dune DLL, les fonctions qui seront exportes
(les autres qui ne le sont pas, servent de routines aux fonctions exportes) doivent avoir un
long prfixe, et celui l, il faut le savoir.
Pour obtenir votre DLL, compilez. Vous obtiendrez votre fichier *.dll ainsi quun fichier *.lib
Gardez ces deux fichiers prcieusement.

CHAPITRE 3 -> Construire le programme client


Eh bien vous faites un programme normal sous Windows avec votre outil prfr et vous lui
rajoutez ces quelques lignes (explications aprs) :
#includes

..
extern "C" __declspec(dllimport) int addition(int,int) ;
.
Addition(a,b) ;
....
Lors de la cration de la DLL, un fichier *.lib a t gnr : ajoutez-le au projet (votre
programme) (si vous tes sous BCB, ajoutez dans la forme principale :
USELIB( maDLL.dll ).
Le prfixe, lgrement diffrent de celui de votre fonction dans la DLL est :
extern "C" __declspec(dllimport)
Le prfixe entre parenthses est trs important, cest lui qui dit au compilateur que cette
fonction provient de la DLL du mme nom que votre *.lib ajout au projet.
Vous avez rarement vu que lon dclarait une fonction comme ceci :
Fonction ( type, type) ;
Si vous ne mettez pas le nom des variables qui suivent, cest que vous indiquez juste au
compilateur le nombre darguments que la fonction doit prendre. Ce nest pas plus compliqu
que cela !
Aprs la dclaration, il ne vous reste plus qu utiliser la fonction normalement !

CHAPITRE 4 > Utilisation dynamique dune DLL


Je rajoute ce chapitre car on ma pos plusieurs fois la question : Et si la dll que je veux
utiliser nest pas de moi ? Cela veut-donc dire que je nai pas ce fichier *.lib !
Vrai. Alors, une solution ? Oui. Il y a deux manires de palier votre problme :
1- Utilisez le logiciel Implib de Borland. Je ne lai jamais utilis Mais je crois
savoir que les fichiers *.lib crs ne sont valables que pour Borland C++ Builder.
2- Allez voir ce lien : http://lfe.developpez.com/DLL/#L3 . Vous verrez que cest
pour BCB mais que la partie de chargement de la DLL, utilisation est trs peu diffrente
de Visual C++ ou encore Dev C++.

Auteur : Charles Xs Delire8 Xcept Langevin


Rectifications : bencfx@aol.com, fox00

Copyright : Libre diffusion aprs modifications autoris sous rserve davoir prvenu
lauteur
E-mail : Charles_reso@yahoo.fr

Vous aimerez peut-être aussi