![]() |
Funktion ausführen, Die in einem String steht?
Hallo zusammen!
Ich habe einen Funktionsnamen in einem String stehen, wie z.B. "CheckMail". Jetzt möchte ich überprüfen ob eine Funktion CheckMail existiert, und wenn ja, möchte ich diese gerne aufrufen. Geht das irgendwie auch ohne lauter IF, THEN und ELSE Anweisungen? Das Problem ist halt, das die Funktionen immer erweitert werden sollen und IF Anweisungen nicht viel Sinn machen. Es wäre schön wenn mir jemand helfen könnte! |
Re: Funktion ausführen, Die in einem String steht?
Hallo,
wenn Du die Funktionen in eine DLL auslagerst, kannst Du mit dem Funktionsnamen in einem String den Entrypoint bestimmen und die Funktion dann aufrufen. Guck mal nach GetProcAddress. Klaus |
Re: Funktion ausführen, Die in einem String steht?
Hallo DelphiKlaus!
Danke für deine Antwort. Ich habe mal danach gesucht, und auch etwas gefunden. ![]() Nun ist die Frage, wie ich das ganze anwende, denn ich weiß ja nicht welche Funktionen in der DLL drin sind. Oder muss ich zwingend Wissen welche Funktionen da drin stehen? Oder kann ich das auch so machen?
Delphi-Quellcode:
type
TMyFunc = function(): Boolean; stdcall; {...} var {...} DLLHandle: THandle; MyFunc: TMyFunc; procedure TMainForm.ButtonLoadClick(Sender: TObject); begin try DLLHandle := LoadLibrary(PChar('meine.dll')); @MyFunc := GetProcAddress(DLLHandle, 'mein funktions string'); if (@MyFunc <> nil) then begin // ausführen MyFunc(); {...} end else begin FreeLibrary(DLLHandle); MessageDlg('Die Funktion wurde in der Bibliothek meine.dll nicht gefunden...' + #13 + 'Source: meine.dll', mtError, [mbOk], 0); end; except MessageDlg('Die Funktions-Bibliothek meine.dll konnte nicht geladen werden!' + #13 + 'Source: meine.dll', mtError, [mbOk], 0); end; |
Re: Funktion ausführen, Die in einem String steht?
Na man sollte halt schon die Parameterliste und den Rückgabewertetyp der Funktion kennen. Gibt sonst z.B. ganz fiese Abstürze wenn Programm und DLL sich nicht über die Anzahl Parameter auf dem Stack einig sind :)
Der Knackpunkt für Dich ist nämlich, dass man bei DLLs relativ einfach (bitte Anmerkung unten beachten) rausfinden kann, welche Funktionsnamen eine DLL exportiert, das gilt aber halt eben nicht für die Parameterlisten und Rückgabetypen. Anmerkung: Eine DLL muss auch nicht zwangsweise Klartextnamen exportieren, es gibt auch etliche DLLs bei denen nur Ordinals exportiert werden (da sind die Funktionen dann einfach durchnumeriert und werden mit einer Zahl statt einem Namen identifiziert). Es hindert Dich ja aber auch niemand daran, so eine Art Inhaltsverzeichnis der DLL selber zu programmieren. D.h. es gibt dann eine feststehende Funktion die dir einen Datenblock an Informationen liefert, was in der DLL sonst noch drin ist. Ob das ganze aber überhaupt sinnvoll ist, kann ich anhand der spärlichen Informationen nicht beurteilen. Was genau hast Du überhaupt vor? Die bisherigen Beschreibungen sind ja mehr als diffus... :) |
Re: Funktion ausführen, Die in einem String steht?
Hallo nochmal!
Also ich will ein kleines Fernwartungs-Administrationstool entwickeln. Wenn jemand bei uns in der Familie Probleme mit dem Computer hat, dann bin ich der erste der angerufen wird. Jetzt habe ich mir überlegt ein kleines Fernwartungstool zu programmieren. Das Tool holt sich beim Start immer die aktuellste dll aus dem Netz. Wenn ich mich dann auf den Computer verbinde und "Kommandos" sende, wie z.B. RESTART oder sowas, dann soll der Client die Funktion RESTART in der dll suchen und ausführen können. Wie erstelle ich denn am besten so ein "Inhaltsverzeichnis" meiner Dll? Ist mein Lösungsansatz überhaupt sinnvoll oder hast du eine andere Idee? |
Re: Funktion ausführen, Die in einem String steht?
Eventuell wäre
![]() Damit kannst Du Deine Anwendung Scriptbar machen und solche Methoden aus dem Script heraus aufrufen. |
Re: Funktion ausführen, Die in einem String steht?
Cool! Vielen Dank Phoenix. Was es nicht alles gibt.
Ich werde mich dann mal ans versuchen machen. Danke nochmal an alle! |
Re: Funktion ausführen, Die in einem String steht?
Wenn ich "Fernwartungstool" höre, denke ich zuerst an
![]() |
DP-Maintenance
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Geht um Delphi |
Re: Funktion ausführen, Die in einem String steht?
Zitat:
Beispiel: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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