![]() |
Frage zum laden von DLL´s
Hi,
ich möchte gerade ein kleines Pluginsystem erstellen. Die Dll´s haben enthalten alle nur eine identische function die exportiert wird. Meine Frage ist nun folgende. Ich habe in einem Plugin Ordner nun alle Plugin DLL´s liegen. Nun sollen die ganzen Plugins in einem Listview angezeigt und bei einem Doppelklick auf den Pluginnamen dann geladen/ausgeführt werden. Wie ich die Pluginnamen in ein ListView bekomme ist mir schon klar. Nur nicht wie ich die Plugins dann einbinden soll. Wie ich eine einzelne Dll beim Programmstart lade ist mir bekannt. Nicht aber wie man das ganze bei mehreren DLL´s mit der selben function handhaben soll. Ich hoffe mir kann da jemand auf die Sprünge helfen :) mfg Blamaster |
Re: Frage zum laden von DLL´s
Ich kenn Dein Programm jetzt nicht. Aber eigentlich packst Du in Deinen Event Handler, der das Klickevent bearbeitet auf das Du reagieren willst, einfach Code der die DLL lädt (falls noch nicht geschehen), sich via DLL Handle, dem Funktionsnamen und der
![]() |
Re: Frage zum laden von DLL´s
Zitat:
mfg Blamaster |
Re: Frage zum laden von DLL´s
Hab grad keinen Windows Rechner zur Hand, Code ist also untested. Aber im Grunde läuft sowas in etwa so ab:
Delphi-Quellcode:
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
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; ![]() ![]() ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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