Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
prog:lazarus:cas:dll:creation [17/03/2023 16:24]
thierry [Test Simple avec chargement dynamique]
prog:lazarus:cas:dll:creation [17/03/2023 16:29] (Version actuelle)
thierry [Code du projet de test]
Ligne 22: Ligne 22:
 </​code>​ </​code>​
 ==== Code du projet de test ==== ==== Code du projet de test ====
 +<code delphi>
 +unit uFormMain;
 +
 +{$mode objfpc}{$H+}
 +
 +interface
 +
 +uses
 +  SysUtils, ​ Forms, ​ Dialogs, ​ StdCtrls;
 +  ​
 +type
 +  TFuncInDll = function(): integer; stdcall;
 +
 +  { TForm1 }
 +
 +  TForm1 = class(TForm)
 +    Button1: TButton;
 +    Label1: ​ TLabel;
 +    procedure Button1Click(Sender:​ TObject);
 +    procedure FormCreate(Sender:​ TObject);
 +    procedure FormDestroy(Sender:​ TObject);
 +  private
 +    FDLLHandle: TLibHandle;
 +    FDLLFunc: ​  ​TFuncInDll;​
 +    procedure LoadDLL;
 +    procedure UnloadDLL;
 +
 +  public
 +
 +  end;
 +
 +var
 +  Form1: TForm1;
 +
 +implementation
 +
 +{$R *.lfm}
 +
 +{ TForm1 }
 +
 +procedure TForm1.Button1Click(Sender:​ TObject);
 +begin
 +  label1.Caption := IntToStr(FDLLFunc());​
 +end;
 +
 +procedure TForm1.FormCreate(Sender:​ TObject);
 +begin
 +  FDLLFunc := nil;
 +  LoadDLL;
 +end;
 +
 +procedure TForm1.FormDestroy(Sender:​ TObject);
 +begin
 +  UnloadDLL;
 +end;
 +
 +{ Chargement de la DLL et assignation des functions }
 +procedure TForm1.LoadDLL;​
 +var
 +  vNomDLL, vNomFunction:​ string;
 +begin
 +  vNomDLL:​='​dllDLL1.dll';​
 +  vNomFunction:​='​test';​
 +  ​
 +  { Chargement de la DLL }
 +  FDLLHandle := SafeLoadLibrary(vNomDLL);​
 +  if FDLLHandle <> 0 then
 +  begin
 +    { Assignation de la function "​test"​ }
 +    FDLLFunc := TFuncInDll(GetProcedureAddress(FDLLHandle,​ vNomFunction));​
 +    if not assigned(FDLLFunc) then
 +      raise Exception.CreateFmt('​function [%s] non trouvée !',​[vNomFunction]);​
 +  end
 +  else
 +    raise Exception.CreateFmt('​DLL [%s] non chargée !',​[vNomDLL]);​
 +end;
 +
 +procedure TForm1.UnloadDLL;​
 +begin
 +  FreeLibrary(FDLLHandle);​
 +end;
 +
 +end.
 +</​code>​