Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- La F.A.Q. Delphi
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - DLL

Présentation

Une DLL (Dynamic Link Library) signifie bibliothèque à liaison dynamique.
La DLL est un lieu de stockage privilégié. Elle est constituée d'un code source stocké dans un fichier qui a pour format "DLL". Le code source d'une DLL est composé de fonctions et de procédures.
Une DLL n'est pas autonome, son code source est appelé à partir de programme exécutable.
L' avantage majeur d'une DLL est de pouvoir partager le code entre plusieurs sources sans donner le source. En Delphi et dans les autres langages objet, lorsque vous utilisez l'API Windows, les fonctions ou procédures proviennent de DLL.

Il existe trois grandes familles de DLL :

DLL de fonction

Ce type de DLL permet de stocker des fonctions (et des procédures) qui peuvent etre utiliser dans différente application.

DLL de ressources

Ce type de DLL contient des ressources Windows (bitmaps, icones, curseurs, ...).

DLL d'objets COM

Ce type de DLL permet de réutiliser ces DLL par d'autres langages de programmation.


Lorsque vous saurez faire une DLL de fonction, les autres types de DLL se construisent de la même façon.
Ce qui change, c'est le contenu des fonctions et des procédures.

Créer une DLL de fonction

Pour construire une DLL, il faut cliquez dans le menu "Fichiers" de Delphi puis sur "Nouveau...".
Choisissez ensuite "DLL" et cliquez sur le bouton "Ok".




Voici ce que vous obtienderez :

library Project1;

uses

SysUtils,
Classes;

{$R *.RES}


begin
end.

Pour commencer, il faut savoir qu'il existe deux types de fonctions et de procédures dans une DLL de fonction :
- Il y a les fonctions et procédures qui serviront en interne du code source et ne seront pas accecibles.
- Il y a également les fonctions et procédure qui seront appelés par le programme exécutable.


C'est pour cela, qu'il faut définir les fonctions et les procédures qui seront exportées.
Les fonctions et procedures qui seront exportées pourront être utiliser par un programme.



L'exportation de fonctions et de procedure

Il existe trois types d'exportations pour une DLL :
- L'exportation par noms de fonctions et de procédures.
- L'exportation par noms.
- L'exportation par numéros d'ordre.

Exportation par noms de fonctions et de procedures

Voici l'exportation par noms de fonctions et de procédures, la plus courante.


library Project1;

uses

SysUtils,
Classes;

{$R *.RES}


procedure Bruit;
begin
Beep;
end;

procedure DeuxBruit;
begin
Beep;
end;


exports

Bruit;
DeuxBruit;

begin
end.

L'exportation se fait, ici par le nom des fonctions et des procédures.
Le mot clé "exports" sert à exporter une fonction ou procédure.
La procedure "Bruit" pourra alors être appelé par un programme.

Exportation par noms

L'exportation par noms consiste à utiliser le mot "name" pour donner un nom d'exportation aux noms des fonctions et des procedures.


exports
Bruit name 'Br',
DeuxBruit name 'Br2';

begin
end.

Exportation par numéro d'ordre

Pour exporter des procédures et des fonctions, vous pouvez aussi utiliser des numéros d'ordre.


exports
Bruit index 1,
DeuxBruit index 2;

Vous pouvez également associer l'exportation par noms et l'exportation par numéros d'ordre.

exports
Bruit name 'Br' index 1,
DeuxBruit name 'Br2' index 2;

Pour importer une fonction ou une procédure dans un programme, vous spécifirez maintenant le numéro d'ordre.

Convention d'appel

Il existe plusieurs sortes de convention d'appel :
- CDecl
- Pascal
- Register
- StdCall.

La plus utilisée est "Stdcall".
A noté qu'il n'est plus nécessaire de qualifier les fonctions et procedures exportées depuis Delphi 2 par la convention d'appel "StdCall" car par défaut la routine a pour convention "StdCall" .
Il est toutefois conseillé de le faire.


procedure Bruit; StdCall;
begin
Beep;
end;

procedure DeuxBruit; StdCall;
begin
Beep;
end;


exports

Bruit,
DeuxBruit;

begin
end.


Utiliser une DLL de fonction

Tout d'abord, créez une nouvelle application Delphi.
Pour utiliser les fonctions et procédures d'une DLL, il faut les importer.

L'importation se fait par une déclaration qui peut être dans la partie interface ou dans la partie implementation du code source de votre programme.

Il existe trois types d'importations pour une DLL :
- L'importation par nom.
- L'importation par surnom.
- L'importation par index.

Importation par nom

Voici un exemple d'importation par nom de deux procédures provenenant d'une DLL appelée "Project1".

implementation

{$R *.DFM}

procedure Bruit; external 'Project1';
procedure DeuxBruit; external 'Project1';


Il n'est pas nécessaire également de qualifier les fonctions et procedures importées par la convention d'appel "StdCall". Il est toutefois conseillé de le faire.

implementation

{$R *.DFM}

procedure Bruit; StdCall; external 'Project1';
procedure DeuxBruit; StdCall; external 'Project1';


Vous appelerez les procedures par "Bruit" et "DeuxBruit".

DLL    [ 22-08-2002 ]
 Exemple de programme utilisant une DLL par nom.
Télécharger :  [72 Ko] [Télécharger dll.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 

Importation par surnom

Ce type d'importation permet lorsque vous utilisez plusieurs DLL et que deux procedures ou que deux fonctions possède le même nom de changer le nom d'utilisation de ces deux fonctions ou de ces deux procedures dans votre programme.

implementation

{$R *.DFM}

procedure Br1; StdCall; external 'Project1' name Bruit;
procedure Br2; StdCall; external 'Project2' name Bruit;


Vous appelerez maintenant les procedures par "Br1" et "Br2".

Importation par index

L'importation par index sert aussi si il y a deux noms de procédures ou de fonctions identiques.
Il faut alors indiquer la position de la routine dans le source de la DLL.

implementation

{$R *.DFM}

procedure Br1; StdCall; external 'Project1' index 1;
procedure Br2; StdCall; external 'Project1' index 2;


Cette importation ne peut être effectuer que si c'est vos propres DLL car vous aurez accès aux sources et donc aux numéros d'index dans le source de la DLL. Si ce n'est pas vos DLL, vous ne pourrez pas savoir le numéro d'index si il y en a un.

Vous appelerez les procedures par "Br1" et "Br2".

DLL    [ 22-08-2002 ]
 Exemple de programme utilisant une DLL par index.
Télécharger :  [72 Ko] [Télécharger dllindex.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 


Chargement dynamique d'une DLL

Le chargement dynamique d'une DLL permet d'allèger les ressources mémoire dans le cas où vous importez beaucoup de fonctions et de procedures.
Le but est de charger une fonction ou une procedure lorsque que l'on en a besoin.

procedure TForm1.Button1Click(Sender: TObject);
Type
TMonBruit = procedure;
Var
Hdle : THandle;
Bruit:TBruit;
begin

Hdle:=LoadLibrary('Project1.dll'); //Charge la DLL
@Bruit:=GetProcAddress(Hdle,'Bruit'); //Récupère l'adresse de la procedure
Bruit; //Appelle la procedure "Bruit"
FreeLibrary(Hdle); //Libère la DLL
end;

Pour appeler une fonction ou une procedure dans un programme, il faut déclarer un type qui décrit la procédure ou la fonction. Il faut insèrer aussi les paramètres de la fonction ou de la procedure si il y en a.
Ensuite, on charge la DLL et on utilise "GetProcAddress" pour pointé vers la pr
ocedure.
Pour terminer, on appelle la procedure et on libère la DLL.

DLL    [ 22-08-2002 ]
 Exemple de programme utilisant une DLL avec un chargement dynamique.
Télécharger :  [72 Ko] [Télécharger dlldynam.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 


Inclure une fiche dans une DLL

Voici un programme permettant d'inclure une form dans une DLL. Vous pouvez ensuite, l'utiliser dans un autre programme grâce à l'importation d'une procedure issue de la DLL.

DLL    [ 16-06-2003 ]
 Inclure une form dans une DLL.
Télécharger :  [13 Ko] [Télécharger dllform.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 

Tous droits réservés - Contacts
Haut de la page