AGB  ·  Datenschutz  ·  Impressum  







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

Funktion über ihren Namen als String aufrufen

Ein Thema von Jumpy · begonnen am 21. Mär 2013 · letzter Beitrag vom 21. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#1

Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 11:11
Hallo,

in manchem VBA kann man mit einem Funktionsnamen der als String vorliegt, diese Funktion aufrufen:
CALL("MeineFunktion"). Weiß gerade nicht wie/ob man dabei auch Parameter übergeben kann, ist aber auch egal, da ich das nur ohne Parameter brauche.

Die Frage ist natürlich, ob das auch in Delphi irgendwie geht.

P.S.: Ich hab zwar wie ich gerade sehe überall Funktion geschrieben, meinte allerdings Prozedur.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 11:16
Sofern es sich um Methoden handelt, wäre evtl. etwas mit Delphi-Referenz durchsuchenTMethod und Delphi-Referenz durchsuchenMethodAddress zu machen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 11:17
Mit Deinem Delphi 6 wird das so wohl nicht gehen. Bei neueren Versionen (ich glaub ab 2010) gibt es die RTTI.
Jens
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 11:28
Mit Deinem Delphi 6 wird das so wohl nicht gehen. Bei neueren Versionen (ich glaub ab 2010) gibt es die RTTI.
Ab 2010 gab es Extended RTTI, davor gab es ('einfache') RTTI, in Delphi 6 kann man damit zum Beispiel published Properties über ihren Namen ansprechen und Werte lesen/schreiben - Methoden mit Parametern werden erst mit Extended RTTI über Namen ansprechbar, das geht in Delphi 6 noch nicht.
Michael Justin
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 12:16
OK. Wäre denn folgender Workarround denkbar / sinnvoll:

Es gibt eine Funktion oder eine Klasse mit u.a. einer Funktion. Dieser wird der Name einer anderen Funktion als String übergeben und diese startet dann über ein "If...then...else usw."-Konstrukt die gewünschte Funktion.
Die Funktion muss natürlich alle diese Funktionen kennen und es wäre ggf. auch möglich Parameter zu übergeben (ist aber z.Zt. nicht wichtig).
Also so etwas wie eine Factory für Funktionen?

Zum Hintergrund: Bestimmte Funktionen sollen hintereinander ablaufen, die Ablaufreihenfolge soll aber veränderbar sein (über eine Tabelle gesteuert).
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 12:28
Ja, warum denn nicht ...
Delphi-Quellcode:
procedure CallFunction( const AName : string; AParams : array of const; AResult : Variant );
var
  LName : string;
begin
  AResult := Null;
  LName := LowerCase( AName );
  if LName = 'tollefunktionthen
    tollefunktion
  else if LName = 'nochtollerefunktionthen
    nochtollerefunktion
  else
    raise Exception.CreateFmt( 'Funktion "%s" nicht gefunden!', [AName] );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 12:33
Prima, danke für die Bestätigung.
Ralph
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.161 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 12:59
Ich habe zwar das Delphi Language Coding Standards Document oder den Object Pascal Style Guide zwar noch nicht durchgeackert. Aber darf man trotzdem fragen, warum eigentlich das A als Prefix?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 13:03
wenn Du den Link schon angibst:
Zitat:
The "A" prefix is a convention to disambiguate when the parameter name is the same as a property or field name in the class.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 13:12
Ich habe zwar das Delphi Language Coding Standards Document oder den Object Pascal Style Guide zwar noch nicht durchgeackert. Aber darf man trotzdem fragen, warum eigentlich das A als Prefix?
Weil es dadurch klarer wird
Delphi-Quellcode:
type
  TMyClass = class
  strict private
    _Value : string;
  private
    FValue : string;
    function GetValue : string;
  public
    function GetSomething( const AValue : string ) : string;
    property Value : string read GetValue;
  end;

function TMyClass.GetValue : string;
begin
  Result := '_' + FValue + '_';
end;

function TMyClass.GetSomething( const AValue : string ) : string;
var
  LValue : string;
begin
  LValue := 'Something';
  
  Result :=
    LValue + // local variable
    AValue + // attribute
    _Value + // strict private class field
    FValue + // private class field
    Value; // property
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:12 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