CREATION DE DLL DELPHI

 

dernière mise à jour le : samedi 29 janvier 2000 (remplacement de label3.caption par Form.label3.caption)

Une DLL pourquoi ?

Les DLL (bibliothèque dynamiquement liée) sont des fichiers exécutables (.dll) contenant des fonctions ou des procédures qui peuvent être appelées par des applications écrites en Delphi, C, C++, Paradox, dBase, VB... Elles permettent à la fois d'avoir des même fonctions ou procédures appelées par plusieurs programmes et d'écrire un programme à l'aide de plusieurs langages. Lorsque l'on met à jour une DLL, on n'a pas besoin de recompiler les applications qui l'appellent.

 

Création des DLL : principe

Pour créer une DLL, il suffit de créer un projet puis de faire quelques modifications et de le recompiler.
Prenons par exemple le projet suivant :
source

 

Modification du projet

Faire les modifications suivantes dans le source du projet (pour l'atteindre: Delphi 3 faire Voir / Source du projet. Versions supérieures : faire Projet/Voir le source)

 

 

Déclaration de la routine d'interface

Il faut alors déclarer et créer les fonctions et procédures qui seront mises à disposition des autres applications :

Modifions notre programme comme suit :

function plus(i,j:integer):integer;stdcall; // stdcall est une des 4 possibilités de type de gestion du passage de paramètres voir plus bas

function plus(i,j:integer):integer;
var Form:TForm1;
begin

  Form:=Tform1.create(application);// création de la fiche
Form.ShowModal;//
affichage de la fiche
Result:=StrToInt(Form.Label3.Caption);//
Result est le résultat de notre fonction
Form.Free;//
libération de la mémoire

end;

Exportation des routines :

Il faut également indiquer au programme le nom des fonctions et procédures qui sont "exportables" et sous quel nom on pourra les atteindre de "l'extérieur":
Mettre cette ligne dans la partie implémentation par exemple sous la description de la fonction "plus" décrite ci-dessus.

exports plus name 'somme';// exporte la fonction plus qui sera atteignable par le nom somme.
voir plus bas les différentes exportations possibles

Attention aux majuscules : somme n'est pas le même nom que Somme

Voilà, c'est tout votre DLL est prête à être compilée (Ctr F9) et utilisée.

A ce stade, le source doit être ainsi: Source

 

Pour tester cette DLL,

vous pouvez télécharger puis compiler les sources du projet : utildll
N'oubliez pas de recopier votre DLL dans le dossier où se trouvent les fichiers dézippés de utildll.

 


 

 

Quelques précisions

 

Utilisation des strings

si vos DLLs exportent des procédures ou des fonctions passant en paramètre des chaînes ou ayant des chaînes comme résultats de fonction : ShareMem doit être la première unité dans la clause USES de votre bibliothèque, ET dans la clause USES de votre projet

En ce cas, DELPHIMM.DLL doit être fournis avec votre application. Pour éviter l'emploi de DELPHIMM.DLL, passez vos chaînes en utilisant des paramètres PChar ou ShortString.

 

Mode de passage des paramètres

Dans la déclaration
function plus(i,j:integer):integer;stdcall;
stdcall est une des 4 possibilités de type de gestion du passage de paramètres.

Le mode de gestion du passage de paramètres doit être le même que dans la fonction (ou procédure ) appelante et dépend donc du langage utilisé pour cette dernière.

Convention

type de convention

commentaire

register Registres Permet d'optimiser la vitesse d'accès aux paramètres
pascal Pascal Méthodes plus rapide que celle du C
cdecl C  
stdcall Win 32 Nouvelle convention apparue avec l'arrivé des versions 32 bits.
L'API windows 32 bits utilise cette convention.

 

 

Précision sur les différentes exportations des routines possibles:

exports plus name 'somme'; // exporte la fonction plus qui sera atteignable par le nom somme.

exports plus index 10; // exporte la fonction plus qui sera atteignable par son numéro d'indice : 10.

exports plus name 'somme' index 10;

La gestion des dll en 16 bits faisait que l'utilisation des indices permettait de meilleures performances. Ce n'est plus vrai en 32 bits. C'est pour cette raison qu'à partir de Delphi 2, les routines de l'API Windows ne sont plus importées par indice, mais seulement par nom.

Retour au sommaire. Chapitre suivant.

Retour à la page Delphi