unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
type
   //Typy procedur i funkcji z naszej biblioteki DLL
   OknoDiskInfoType = function(modalne :Boolean; szerokosc :Integer) :THandle; StdCall;
   UsunOknoType = procedure;
var
   DLLHandle :THandle;
   OknoDiskInfo :OknoDiskInfoType;
   UsunOkno :UsunOknoType;
begin
DLLHandle:=LoadLibrary('Project1.dll');
if (DLLHandle<>0) then
   ShowMessage('Wczytanie biblioteki udało się')
   else
   ShowMessage('Wczytanie biblioteki nie powiodło się');

@OknoDiskInfo:=GetProcAddress(DLLHandle, 'OknoDiskInfo');
@UsunOkno:=GetProcAddress(DLLHandle, 'UsunOkno');

if (@OknoDiskInfo=nil) then ShowMessage('Uruchomienie funkcji OknoDiskInfo nie jest możliwe')
  else
  begin
  OknoDiskInfo(True,640);
  if (@UsunOkno=nil) then ShowMessage('Uruchomienie funkcji UsunOkno nie jest możliwe')
    else UsunOkno;
  end;

if (FreeLibrary(DLLHandle)) then
   ShowMessage('Usunięcie biblioteki z pamięci udało się')
   else
   ShowMessage('Usunięcie biblioteki z pamięci nie powiodło się');
end;

end.
