I. Écriture de la DLL▲
I-A. Création du projet de la DLL▲
Dans le menu Fichier, cliquer sur Nouveau puis sur Autre…
Dans la boîte de dialogues qui apparaît, sélectionner Expert DLL puis cliquer sur OK.
Vous venez de créer le projet contenant la DLL. Lisez attentivement le commentaire. Il vous importe de choisir si oui ou non vous décider de faire passer ou de renvoyer des string de votre DLL. Il me semble qu’il ne vaut mieux jamais utiliser cette possibilité. Il est préférable de n’utiliser que les PChar pour des raisons de compatibilités et d’évolutivité de votre programme sur les différentes plateformes et versions de Microsoft Windows ©.
Finalement, enregistrer votre Projet DLL sous le nom : « DLLObjet.dpr ».
I-B. Écriture de l’objet▲
Créez une nouvelle unité qui contiendra l’objet et enregistrez-la sous le nom de « DefObjet.pas ».
Puis définissez l’objet suivant (l’unité entière est recopiée ci-dessous afin de faciliter la compréhension) :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
unit
DefObjet;
interface
uses
SysUtils;
type
TObjetExemple = class
private
FX : Double
;
public
procedure
WX(const
Value: Double
); virtual
; export
; // Écriture de X
function
ReadX : Double
; virtual
; export
; // Lecture de X
function
Carre : Double
; virtual
; export
; // Calcul du Carre de X
end
;
function
GetObjetExemple : TObjetExemple;
// Cette fonction permet de créer et de renvoyer une instance de l’objet TobjetExemple.
implementation
{ TObjetExemple }
function
GetObjetExemple : TObjetExemple; export
;
begin
result := TObjetExemple.Create;
end
;
//-------------------------------------------------------------------------------------------
function
TObjetExemple.Carre: Double
; export
;
begin
result := sqr(FX);
end
;
//-------------------------------------------------------------------------------------------
function
TObjetExemple.ReadX: Double
; export
;
begin
result := FX;
end
;
//-------------------------------------------------------------------------------------------
procedure
TObjetExemple.WX(const
Value: Double
); export
;
begin
if
Value > 0
then
FX := Value
else
raise
exception.Create('X must be 0'
);
end
;
end
.
Remarquez la présence de la clause export à la fin de la déclaration des fonctions.
I-C. Écriture du code source du projet de la DLL▲
Il faut à présent terminer l’exportation des fonctions de la DLL vers les autres programmes. Pour cela, retournez à votre source du projet (fichier DLLObjet.dpr) et déclarez dans la clause exports la fonction GetObjetExemple.
Votre source du projet doit ressembler à ceci :
2.
3.
4.
5.
6.
7.
8.
9.
10.
library
DLLObjet;
uses
SysUtils,
Classes,
DefObjet in
'DefObjet.pas'
;
{$R *.res}
exports
GetObjetExemple;
begin
end
.
Finalement, compilez votre DLL. Dans le répertoire où vous avez enregistré votre projet se trouve le fichier compilé « DLLObjet.DLL » que nous allons utiliser depuis une application externe.
II. Écriture de l’application utilisant la DLL▲
II-A. Création d’un nouveau projet▲
Cliquez sur le menu Fichier, puis Nouveau et enfin Application :
Enregistrez votre projet sous le nom « UseObjetDDL.dpr » et l’unit1 sous le nom de « WinMain.pas ».
Créez une nouvelle unité et enregistrez-la sous le nom de « ImportObjetDLL.pas ».
Cette unité va servir à l’importation de la DLL.
II-B. Écriture de l’unité d’importation de l’objet▲
Copiez-collez la déclaration de l’objet écrite dans la partie interface de l’unité DefObjet.pas de la DLL dans la nouvelle unité ImportObjetDLL.pas. Remplacez les mots-clés export
par abstract
ce qui permet de ne pas avoir à réécrire l’implémentation de l’objet.
Enfin, il reste à déclarer comme fonction externe la fonction GetObjetExemple de l’unité DefObjet.pas de la manière qui suit :
function
GetObjetExemple : TObjetExemple; external
'DLLObjet.dll'
;
dans la partie interface de ImportObjetDLL.
L’unité ImportObjetDLL.pas doit donc ressembler à ceci :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
unit
ImportObjetDLL;
interface
type
TObjetExemple = class
private
FX : Double
;
public
procedure
WX(const
Value: Double
); virtual
; abstract
;
function
ReadX : Double
; virtual
; abstract
;
function
Carre : Double
; virtual
; abstract
;
end
;
function
GetObjetExemple : TObjetExemple; external
'DLLObjet.dll'
;
implementation
{ TObjetExemple }
end
.
« External ‘DLLObjet.dll’ » signifie que le liage de la DLL est statique. La DLL doit se trouver soit dans le répertoire du programme qui l’utilise soit dans l’un des répertoires clés de votre ordinateur (Windows ou Windows\System par exemple).
II-C. Utilisation de l’objet▲
Il ne nous reste plus qu’à utiliser l’objet. Sur la form1, apposez deux TEdits et un TButton :
Dans la partie implémentation de l’unité WinMain, déclarez dans les uses
l’unité ImportObjetDLL.
Puis sur l’évènement OnClic du Button utiliser l’objet en le créant à l’aide de la méthode de la DLL GetObjetExemble. Finalement, l’unité WinMain ressemble à :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
unit
WinMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class
(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure
Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end
;
var
Form1: TForm1;
implementation
uses
ImportObjetDLL;
{$R *.dfm}
procedure
TForm1.Button1Click(Sender: TObject);
var
Ob : TObjetExemple;
begin
Ob := GetObjetExemple; // Création de l’objet
try
Ob.WX(StrToFloat(Edit1.Text));
Edit2.Text := FloatToStr(OB.Carre);
finally
Ob.Free; // Libération
end
;
end
;
end
.
C’est à vous de tester votre premier programme liant un objet dans une DLL externe.
III. Conclusion▲
Ce bref article a été développé dans un souci pédagogique avec un objet très simple. La construction d’objets plus complexes posera sans nul doute des difficultés, notamment lorsque l’objet est visuel tel qu’une TForm auquel cas, il faudra récupérer le Handle de la Form. Le développeur débutant pourra se référer à d’autres articles du site www.developpez.com et trouvera de l’aide auprès de la communauté française sur le forum nzn.fr.delphi que l’on trouve facilement en naviguant sur le site http://www.vienneinfo.org/.
Enfin, avant de tout écrire au sein des DLL, essayez de vous documenter sur les objets COM. Cette technologie et ses dérivées constituent une véritable révolution de l’informatique même si, malheureusement, son apprentissage et sa maîtrise sont longs et difficiles.