Bonjour,

je reviens vers vous car j'ai créé une dll à chargement et à liaison dynamique
voici mon code :

code :
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
function LierFonction(DLL: String; var HandleDLL: THandle; NomFct: String; IndexFct: Integer = -1): Pointer;
begin
  //Valeurs de retour par défaut
  Result := nil;
  HandleDLL := 0;
 
  //Chargement de la DLL. On récupère son handle
  HandleDLL := LoadLibrary(pAnsiChar(DLL));
 
  //Si le chargement a échoué, on sort
  If HandleDLL = 0 then
    Exit;
 
  //On récupère l'adresse de la fonction voulue, que l'on renvoie
  If IndexFct < 0 then //Si l'index est négatif on utilise le nom sous forme de chaîne
    Result := GetProcAddress(HandleDLL, pAnsiChar(NomFct))
  else                  
    //Sinon, on utilise l'index comme identifiant
    Result := GetProcAddress(HandleDLL, pAnsiChar(IndexFct));
end;
 
procedure TForm1.btnSommeClick(Sender: TObject);
var HandleDLL: THandle; //Pour stocker le handle de la DLL chargée
    Somme    : function(A, B: integer): integer; stdcall; //Notre fonction, sous forme de variable
begin
  //On récupère le pointeur sur notre fonction nommée 'Somme' au sein de DLL1.dll
  Somme := LierFonction('DLL1.dll', HandleDLL, 'Somme');
 
  //Si Somme a bien reçu un pointeur valide sur une fonction
  If assigned(Somme) then
  try
    //L'appel de la fonction se passe comme avec une fonction ordinaire
    ShowMessageFmt('%d + %d = %d', [A.Value, B.Value, Somme(.Value, B.Value)]);
  finally
//Ne pas oublier de libérer la DLL lorsqu'elle n'est plus nécessaire
    FreeLibrary(HandleDLL);
  end
  else
    //Sinon, on affiche un message d'erreur : appeler Somme provoquerait une violation d'accès
    ShowMessage('Erreur de chargement de la fonction "Somme"');
end;
où ai-je péché ?
je tourne et retourne mais je ne vois pas mon erreur dans mon dode ?
merci de me venir en aide s.v ???