AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Funktion ausführen, Die in einem String steht?
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion ausführen, Die in einem String steht?

Ein Thema von p.abend · begonnen am 10. Okt 2007 · letzter Beitrag vom 10. Okt 2007
Antwort Antwort
p.abend
(Gast)

n/a Beiträge
 
#1

Funktion ausführen, Die in einem String steht?

  Alt 10. Okt 2007, 05:54
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!
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#2

Re: Funktion ausführen, Die in einem String steht?

  Alt 10. Okt 2007, 06:04
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
  Mit Zitat antworten Zitat
p.abend
(Gast)

n/a Beiträge
 
#3

Re: Funktion ausführen, Die in einem String steht?

  Alt 10. Okt 2007, 06:55
Hallo DelphiKlaus!

Danke für deine Antwort. Ich habe mal danach gesucht, und auch etwas gefunden. http://www.delphi-forum.de/viewtopic...getprocaddress

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;
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

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

Re: Funktion ausführen, Die in einem String steht?

  Alt 10. Okt 2007, 07:09
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...
"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
p.abend
(Gast)

n/a Beiträge
 
#5

Re: Funktion ausführen, Die in einem String steht?

  Alt 10. Okt 2007, 07:14
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?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#6

Re: Funktion ausführen, Die in einem String steht?

  Alt 10. Okt 2007, 07:22
Eventuell wäre Bei Google suchenPascalScript eine Alternative.
Damit kannst Du Deine Anwendung Scriptbar machen und solche Methoden aus dem Script heraus aufrufen.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
p.abend
(Gast)

n/a Beiträge
 
#7

Re: Funktion ausführen, Die in einem String steht?

  Alt 10. Okt 2007, 07:39
Cool! Vielen Dank Phoenix. Was es nicht alles gibt.

Ich werde mich dann mal ans versuchen machen.

Danke nochmal an alle!
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

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

Re: Funktion ausführen, Die in einem String steht?

  Alt 10. Okt 2007, 11:15
Wenn ich "Fernwartungstool" höre, denke ich zuerst an UltraVNC. Recht einfach einzurichten und extrem hilfreich. Und ganz ohne Aufwand was eigenes zu schreiben usw.
"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
10. Okt 2007, 12:29
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Geht um Delphi
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#10

Re: Funktion ausführen, Die in einem String steht?

  Alt 10. Okt 2007, 13:00
Zitat von p.abend:
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.
Wenn du nicht eine Funktion, sondern eine Methode einer Delphi-Klasse verwendest, geht das, sofern die Methode als published deklariert ist.

Beispiel: http://c-plusplus.de/forum/viewtopic...1.html#1258421
Moritz
  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 11:14 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