AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zum laden von DLL´s

Ein Thema von Blamaster · begonnen am 23. Mai 2009 · letzter Beitrag vom 23. Mai 2009
Antwort Antwort
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

Frage zum laden von DLL´s

  Alt 23. Mai 2009, 02:24
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
  Mit Zitat antworten Zitat
Fridolin Walther

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

Re: Frage zum laden von DLL´s

  Alt 23. Mai 2009, 02:57
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 MSDN-Library durchsuchenGetProcAddress API die Adresse der Funktion holt und die Funktion dann aufruft.
Fridolin Walther
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#3

Re: Frage zum laden von DLL´s

  Alt 23. Mai 2009, 14:02
Zitat:
sich via DLL Handle, dem Funktionsnamen und der Suche im Microsoft Developers NetworkGetProcAddress API die Adresse der Funktion holt und die Funktion dann aufruft.
Kann jemand den Schritt etwas erläutern ?

mfg Blamaster
  Mit Zitat antworten Zitat
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 Uhr.
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