Ładowanie dynamiczne procedury z DLL

0

Witam,

Ładowanie biblioteki następuje za pomocą polecenia LoadLibrary. To nie wszystko bowiem dla zmiennej DLL przypisaliśmy bibliotekę. Zauważ, że umieściłem zmienną ShowForm, która nie jest żadnego konkretnego typu, ale oznacza to, że zmienna będzie procedurą. Do tej zmiennej przypisany zostaje adres proceudry znajdującej się w bibliotece (GetProcAddress). Jeżeli wartość ta równa się nil to znaczy, że proceudry lub funkcji o tej nazwie nie można odnaleźć w bibliotece. Na końcu biblioteka jest zwalniana z pamięci.

procedure TForm1.Button1Click(Sender: TObject);
var
  DLL : THandle; // uchwyt biblioteki
  ShowForm : procedure;
begin
  DLL := LoadLibrary('LibSample.dll'); // laduj biblioteke
  try
    @ShowForm := GetProcAddress(DLL, 'ShowForm'); // laduj procedure
    if @ShowForm=nil then raise Exception.Create('Bład - nie mogę znaleźć proceudry w bibliotece!');
    ShowForm; // wywolaj procedure
  finally
    FreeLibrary(DLL); // wreszcie zwolnij pamiec
  end;
end;

A jak to zrobic, gdyby procedura ShowForm miala 2 parametry (np. String, String) potrzebne do jej uruchomienia?

Pozdrawiam

0
type
   TShowForm = procedure(s1:string; s2:string);

a potem w var zamiast typu procedure użyj TShowForm.

.. i wystrzegaj się przekazywania z/do DLL stringów; lepiej użyć tablicę znaków. Jak już musisz, pamiętaj o przeczytaniu tekstu, który Delphi zamieszcza w kodzie utworzonego nowo kodu biblioteki DLL.

1 użytkowników online, w tym zalogowanych: 0, gości: 1