![]() |
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 |
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.
|
Re: DLL Funktionen dynamisch laden
hmmm
könntest du ein kleines beispiel posten? Irgendwie blick ich da noch nicht 100% durch |
Re: DLL Funktionen dynamisch laden
Delphi-Quellcode:
Mit LoadLibrary lädst du die DLL selbst. Das gibt dir ein Handle auf die DLL zurück.
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 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 :) |
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? |
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? |
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 :)
|
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! |
Re: DLL Funktionen dynamisch laden
Das dürfte aber nicht mit dem Standardmemorymanager gehen.
|
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 09:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz