AGB  ·  Datenschutz  ·  Impressum  







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

DLL Laden

Ein Thema von DarkLord0 · begonnen am 20. Mär 2006 · letzter Beitrag vom 21. Mär 2006
Antwort Antwort
DarkLord0

Registriert seit: 31. Okt 2004
59 Beiträge
 
#1

DLL Laden

  Alt 20. Mär 2006, 19:56
Hallo,

Ich bin mir nicht sicher, ob dieses Forum das richtige ist, aber ich hoffe, mein Problem lässt sich mit Hilfe der Windows API lösen (vielleicht ist es auch ganz einfach, hab aber gerade nichts gefunden).

Wie kann ich eine DLL mit einer variablen Anzahl von Funktionen mit variablen Namen und einer variablen Anzahl von Parametern variabler Datentypen laden (ja alles sehr variabel )? Ich habe bis jetzt nur mit DLLs gearbeitet, bei denen feststand, wie die Funktionen heißen und was sie tun etc., aber jetzt brauche ich eine allgemeinere Lösung!

edit : Ich will die Funktionen dann natürlich auch alle benutzen können (das Programm sollte herausfinden können welche funktionen es gibt mit welchen parametern etc, wobei die datentypen der parameter eigentlich garnicht ganz variabel sein müssen, es reichen die standardtypen integer,extended,char,string. theoretisch soll es dann in der lage sein, den user nach allen parametern einer funktion abzufragen und diese dann auszuführen, ohne dass das programm "wissen" muss, was es da genau ausführt).
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#2

Re: DLL Laden

  Alt 20. Mär 2006, 20:09
Edit: Mal wieder nicht genau gelesen. Bitte löschen

[edit=alcaeus]Versucht den Beitragscache durch nochmaliges editieren zu loeschen. Inhalt wurde nicht geaendert Mfg, alcaeus[/edit]
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: DLL Laden

  Alt 20. Mär 2006, 22:13
Moin Darklord,

mal angenommen, die DLL verfügt über einen PE-Header sollten sich die enthaltenen Funktionen ermitteln lassen (dazu liefert Borland, IMHO sogar eine Demo mit). Wenn Du Pech hast, handelt es sich nicht einmal um sprechende Namen, sondern die Funktionen werden nur anhand ihres Indizes exportiert.
Dann müsstest Du die Aufrufkonventionen der einzelnen Funktionen automatisch ermitteln, da Du sonst nicht weisst, wie die Parameter überhaupt übergeben werden, was schon die Ermittlung der Anzahl erschwert.
Dann wäre es wohl noch ganz hilfreich festzustellen, mit welchem Compiler die DLL erstellt wurde, um über die anschliessende Analyse des Codes ermitteln zu können, wieviele Parameter überhaupt übergeben werden.
Du müsstest also automatisiert den Code analysieren, als würdest Du Dir die DLL in einen Debugger laden, und den Assemblercode durchgehen.
Wenn Du dann weisst, wieviele Parameter die Funktion hat, wirst Du sie allerdings wohl immer noch nicht nutzen können, denn Du weisst ja dadurch immer noch nicht, wofür diese jeweils gut sind.

Wenn Du vielleicht mal erzählst, was Du vorhast, kann man Dir vielleicht auch einen Lösungsansatz für Dein Problem geben.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#4

Re: DLL Laden

  Alt 21. Mär 2006, 00:07
Ich wüsste nicht, wozu so etwas gut sein sollte. Was bringt es dir, wenn du z.B. die Funktionsnamen ermitteln kannst? Um die Funktionen auszuführen, müssen sie bereits zur Kompilierzeit in deinem Code aufgerufen werden, d.h. du musst sie im Editor eingetippt haben.
  Mit Zitat antworten Zitat
DarkLord0

Registriert seit: 31. Okt 2004
59 Beiträge
 
#5

Re: DLL Laden

  Alt 21. Mär 2006, 01:04
Danke schonmal!
Uff, das hört sich ja nach viel Arbeit an.
Also es geht darum : Ich schreibe gerade ein Programm, das bestimmte Graphen plotten und graphisch anzeigen kann (Balkendiagramme, Liniendiagramme und allgemein Graphen, bei denen jedem x-Wert aus einem vorgegebenen Bereich eine Anzahl von Real-Werten zugeordnet wird und diese dann auf unterschiedlichste Arten angezeigt werden). Die Daten für die Plots können aus einer Datei geladen werden (typischerweise einfach .csv). Nun soll der User auch die Möglichkeit bekommen, Verfahren anzugeben, neue Daten auf Grundlage der schon geladenen zu erstellen.
Beispiel : Ein Graph wurde geplottet, der jedem x-Wert 2 Real-Werte zuordnet. Der User will einen weiteren Graphen plotten, bei dem jedem x-Wert das Maximum der beiden Real-Werte des ursprünglichen Graphen zugeordnet wird.
Dabei soll dem User aber maximale Freiheit geboten werden, was die Zusammenstellung der Werte des neuen Graphen angeht (d.h. nicht nur ein paar hardgecodete Möglichkeiten). Wahrscheinlich könnte man das auch alles in eine Funktion packen, aber mich hat darüber hinaus noch interessiert, wie man das mit mehr machen würde. Also vereinfachter Fall : Es ist eine DLL mit genau einer Funktion gegeben, die als einen Parameter den gerade geplotteten Graphen hat (bzw. einen Array mit allen Punkten) und als Ausgabewert den neuen Graphen. Außerdem, und das ist das wichtige, hat diese Funktion noch eine beliebige Anzahl anderer Parameter (spezifische Einstellungen), die in die Berechnung mit eingehen und die unterschiedliche Typen haben können. Wenn eine DLL geladen wird, soll das Programm prüfen, wie viele und was für zusätzliche Parameter erforderlich sind und dann den User nach diesen abfragen. Dann soll es sie an die DLL übermitteln und den von der DLL erhaltenen Graphen plotten.

edit : Mein Beispiel oben ist übrigends blöd, weil da garkeine zusätzlichen Parameter gebraucht werden. Aber wenn das Maximum der beiden Werte immer noch mit a multipliziert wird, wobei a eine reelle Zahl ist, dann hätte man schon einen Parameter mehr. Es sind natürlich beliebig komplizierte Verfahren denkbar, die beliebig viele Parameter brauchen.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: DLL Laden

  Alt 21. Mär 2006, 01:26
Moin Darklord,

das klingt für mich nach einem Plug-In System.
Hier solltest Du einfach gewisse Sachen vorgeben, damit die DLL von Deinem Programm verwendet werden kann.
(BTW: Das hatten wir hier mit Sicherheit schon mehrfach)
U.A. könntest Du z.B. einen Parameter vorgeben, der eine Liste von Werten mit Angabe des Typs enthält, die Du dann verarbeiten kannst.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: DLL Laden

  Alt 21. Mär 2006, 08:26
Wieso nicht einfach eine Script-Engine? Da bieten sich diverse Vertreter an:Die Parameteranzahl sowie das Format müssen aber bekannt sein. Wenn Du allerdings die Parameter als 'Array Of Const' deklarierst, hasdt Du, was Du willst.

Bei Verwendung von DLL hast Du dann aber keine Plattform/Sprachenunabhängigkeit mehr, weil andere Sprachen diesen 'Trick' nicht kennen (soweit ich weiss).

Aber mit einem Variant-Array kriegst Du sie Alle
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 18:50 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