Bonjour,
J'essaie de créer puis d'utiliser une DLL. Sur le Site j'ai trouvé un tutorial mais il ne marche pas chez moi. C'est un exemple simple qui consiste à implémenter une fonction faisant la somme de deux entiers.
Creation de la DLL:
A partir du menu je fais "Nouveau | Autre..." et je crée un nouveau projet de type "Expert DLL.
Puis j'implemente le code suivant:
Premier truc bizard dans le menu quand je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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 library DLL1; { Remarque importante concernant la gestion de mémoire de DLL : ShareMem doit être la première unité de la clause USES de votre bibliothèque ET de votre projet (sélectionnez Projet-Voir source) si votre DLL exporte des procédures ou des fonctions qui passent des chaînes en tant que paramètres ou résultats de fonction. Cela s'applique à toutes les chaînes passées de et vers votre DLL --même celles qui sont imbriquées dans des enregistrements et classes. ShareMem est l'unité d'interface pour le gestionnaire de mémoire partagée BORLNDMM.DLL, qui doit être déployé avec vos DLL. Pour éviter d'utiliser BORLNDMM.DLL, passez les informations de chaînes avec des paramètres PChar ou ShortString. } uses SysUtils, Classes; {$R *.res} function Somme(A, B: Integer): Integer; stdcall; begin Result := A + B; end; exports Somme; //Sans précision, le nom d'exportation sera "Somme" et l'index 1 begin end.
Projet / Compiler DLL1
ou
Projet / Construire DLL1
ou
Projet / Vérifier la syntaxe de DLL1
En apparance aucune reaction de delphi, il ne se passe rien mais DLL1.dll apparaît dans le répertoire. Je me dis que ca doit etre ok.??
Utilisation de la DLL:
Puis j'essaie d'utiliser la DLL.
Je la copie donc dans un autre repertoire qui est celui d'un projet standard.
Est que c'est bien ca qu'il faut faire ?
Voici le code de ce projet:
Que J'utilise l'Importation en spécifiant son index ou son nom, je me fais jeter par delphi. Voici ce qu'il me dit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Button2: TButton; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; const NomDLL = 'DLL1.dll'; function Somme(A, B: Integer): Integer; stdcall; external NomDLL; implementation {$R *.dfm} //Importation en spécifiant le nom de la fonction //function Somme(A, B: Integer): Integer; stdcall; external NomDLL name 'Somme'; //Importation en spécifiant son index function Somme(A, B: Integer): Integer; stdcall; external NomDLL index 1; procedure TForm1.Button1Click(Sender: TObject); //test sans DLL begin button1.Caption:=inttostr(strtoint(Edit1.Text)+strtoint(Edit2.Text)); end; procedure TForm1.Button2Click(Sender: TObject); //test de la DLL begin button2.Caption:=inttostr(somme(strtoint(Edit1.Text), strtoint(Edit2.Text))); end; end.
[Erreur] Unit1.pas(45): Identificateur redéclaré : 'Somme'
[Avertissement] Unit1.pas(45): Le symbole 'INDEX' est propre à une plate-forme
[Erreur] Unit1.pas(59): Trop de paramètres originaux
[Erreur fatale] Project1.dpr(5): Impossible de compiler l'unité utilisée 'Unit1.pas'
Quelqu'un voit il ce qui cloche ?![]()
Partager