Einzelnen Beitrag anzeigen

Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Frage zum laden von DLL´s

  Alt 23. Mai 2009, 17:03
Hab grad keinen Windows Rechner zur Hand, Code ist also untested. Aber im Grunde läuft sowas in etwa so ab:
Delphi-Quellcode:
procedure DoubleClickHandler();
var
  DllName : string;
  DllHandle : THandle;
  DllFunction : function (Parameter1, Parameter2 : Cardinal) : Boolean; stdcall;
begin
  DllName := 'test.dll'; // An dieser Stelle musst halt den DLL Namen aus Deinem Listview Popeln
  DllHandle := LoadLibrary(DllName); // Wir laden die DLL -> DllHandle enthält jetzt das Handle zur DLL
  DllFunction := GetProcAddress(DllHandle, 'ExportierteFunction'); // Wir holen uns die Adresse der Funktion ExportierteFunction in der DLL und weisen sie unserem Funktionspointer DllFunction zu
  DllFunction(0, 0);
  FreeLibrary(DllHandle); // Wir entladen die DLL nun, weil wir sie nicht länger brauchen
end;
Prinzipiell definierst Du Dir einen Funktionspointer als Variable. Dieser Funktionspointer muss die selbe Signatur haben wie die Funktion die Du aufrufen willst. Achte auch auf die korrekte Calling Convention (stdcall, cdecl oder was auch immer). Dann lädst Du die entsprechende DLL mit MSDN-Library durchsuchenLoadLibrary. MSDN-Library durchsuchenLoadLibrary gibt Dir ein Handle auf die DLL zurück. Dieses Handle benutzt Du dann um mit MSDN-Library durchsuchenGetProcAddress die Adresse der von Dir gewünschten Funktion zu ermitteln. Die Adresse kannst Du dabei dem von Dir definierten Funktionspointer zuweisen. Danach rufen wir den Funktionspointer auf. Dabei wird dann der Code an der Position die MSDN-Library durchsuchenGetProcAddress zurück geliefert wurde mit den entsprechend definierten Parametern aufgerufen. Zu guter letzt solltest Du die DLL dann nachdem Du sie nicht mehr brauchst mit MSDN-Library durchsuchenFreeLibrary entladen.
Fridolin Walther
  Mit Zitat antworten Zitat