Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DLL Funktionen dynamisch laden (https://www.delphipraxis.net/112456-dll-funktionen-dynamisch-laden.html)

hedie 21. Apr 2008 18:48


DLL Funktionen dynamisch laden
 
Hallo

Ich möchte DLL's sowie deren Funktionen Dynamisch laden.

Das bedeutet, das das programm zu beginn die Funktionen einer DLL Nicht kennt
sondern diese als string in der form von: function rechnen(zahl:integer);stdcall;
vorliegen.

Das Programm soll dan automatisch die entsprechenden Funktionen und Proceduren nutzen können.

Wie kann man so etwas realisieren?

Danke schonmal

Apollonius 21. Apr 2008 18:52

Re: DLL Funktionen dynamisch laden
 
Du brauchst nur den Funktionsnamen (Aufrufkonvention, Parameterzahl etc. kannst du nicht überprüfen; falls sie nicht stimmen, kriegst du, wenn du Glück hast, eine Zugriffsverletzung). Die DLL lädst du mit LoadLibrary und verwendest den Rückgabewert für GetProcAddress, welches den Funktionszeiger zurückgibt. Dazu gibt es auch ziemlich viele Tutorials.

hedie 21. Apr 2008 18:53

Re: DLL Funktionen dynamisch laden
 
hmmm

könntest du ein kleines beispiel posten?
Irgendwie blick ich da noch nicht 100% durch

Ghostwalker 21. Apr 2008 18:55

Re: DLL Funktionen dynamisch laden
 
Delphi-Quellcode:
   var MeineFunc : Function (param:pchar):boolean;
   var dllhandle : THandle;

   Function Load_DLL (const dllfilename:string) :boolean;
   begin
     dllhandle := LoadLibrary(pchar(dllfilename));
    if (dllhandle <> 0) then
       MeineFunc := GetProcAdress(dllhandle,pchar('MeineFunction'));
   end;
Mit LoadLibrary lädst du die DLL selbst. Das gibt dir ein Handle auf die DLL zurück.
Mit GetProcAdress holst du die Adresse der Funktion. Anschließend kannst du
ganz normal auf MeineFunc zugreifen.

Wenn alles getant ist und die DLL nicht mehr gebraucht wird, mit FreeLibrary wieder freigeben :)

hedie 21. Apr 2008 18:57

Re: DLL Funktionen dynamisch laden
 
Was wenn ich mehr als eine Funktion habe die genaue anzahl jedoch nicht von beginn an bekannt ist?

Irgendwie 100 mal ne variable schreiben lohnt sich ja nicht oder?

sirius 21. Apr 2008 19:17

Re: DLL Funktionen dynamisch laden
 
Du kannst GetProcAddress zu beleibigen Zeitpunkten aufrufen. Du kannst auch in die DLL schauen, was für Funktionen da zugänglich sind (allerdings musst du da selber den PE-HEader und die Export-Tble auswerten; eine Funktion gibt es dazu nicht).
Was brauchst du noch?

OldGrumpy 22. Apr 2008 09:08

Re: DLL Funktionen dynamisch laden
 
Ich vermute das soll auf ein Plugin-System hinauslaufen, davon wurden hier ja auch schon einige vorgestellt. Einfach mal die Boardsuche mit "plugin" und "system" füttern oder sowas :)

hedie 22. Apr 2008 10:16

Re: DLL Funktionen dynamisch laden
 
Ja du hast recht :D

Aber ich gebe einfach vor das jede Funktion einer DLL
einen TMemoryStream zurück geben muss, damit kann
man bei meinem vorhaben schon genug anfangen :D

Aber trozdem danke!

Luckie 22. Apr 2008 10:46

Re: DLL Funktionen dynamisch laden
 
Das dürfte aber nicht mit dem Standardmemorymanager gehen.

QuickAndDirty 22. Apr 2008 10:58

Re: DLL Funktionen dynamisch laden
 
dann must du eine BPL machen!!!
Oder du must einfach einen Zeiger auf einen Record mit den werten Size und Buffer
zurrückgeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz