AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DLL Funktionen dynamisch laden

Ein Thema von hedie · begonnen am 21. Apr 2008 · letzter Beitrag vom 23. Apr 2008
Antwort Antwort
Seite 1 von 3  1 23   
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

DLL Funktionen dynamisch laden

  Alt 21. Apr 2008, 19:48
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
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: DLL Funktionen dynamisch laden

  Alt 21. Apr 2008, 19:52
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#3

Re: DLL Funktionen dynamisch laden

  Alt 21. Apr 2008, 19:53
hmmm

könntest du ein kleines beispiel posten?
Irgendwie blick ich da noch nicht 100% durch
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: DLL Funktionen dynamisch laden

  Alt 21. Apr 2008, 19:55
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
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#5

Re: DLL Funktionen dynamisch laden

  Alt 21. Apr 2008, 19:57
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?
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: DLL Funktionen dynamisch laden

  Alt 21. Apr 2008, 20:17
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?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#7

Re: DLL Funktionen dynamisch laden

  Alt 22. Apr 2008, 10:08
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
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#8

Re: DLL Funktionen dynamisch laden

  Alt 22. Apr 2008, 11:16
Ja du hast recht

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

Aber trozdem danke!
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: DLL Funktionen dynamisch laden

  Alt 22. Apr 2008, 11:46
Das dürfte aber nicht mit dem Standardmemorymanager gehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.882 Beiträge
 
Delphi 12 Athens
 
#10

Re: DLL Funktionen dynamisch laden

  Alt 22. Apr 2008, 11:58
dann must du eine BPL machen!!!
Oder du must einfach einen Zeiger auf einen Record mit den werten Size und Buffer
zurrückgeben.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:31 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