AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi funktion aufrufen deren namen in einem string steckt
Thema durchsuchen
Ansicht
Themen-Optionen

funktion aufrufen deren namen in einem string steckt

Ein Thema von griever · begonnen am 5. Jul 2009 · letzter Beitrag vom 7. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
griever

Registriert seit: 27. Apr 2008
19 Beiträge
 
#1

funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 12:58
mit findcompnent kann man ja ziemlich praktisch auf eine componente zugreifen deren name in einem string steht.
nun meine frage: gibts das auch für funktion/proceduren bzw eine alternative dazu?

ich habe mir überlegt, das man ja theoretisch eine eigene componente machen könnte, die halt unterschiedlich benannte wird und dann unterschiedlich funktionen ausführt. finde das aber umständlich, weil man dann ja jede funktion anders typisieren müsste.
  Mit Zitat antworten Zitat
Apollonius

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

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 13:03
Funktionsnamen sind im Kompilat nicht mehr erhalten - von etwaigen Debuginformationen einmal abgesehen. Also: unmöglich. Du könntest allerdings auf Methoden umsteigen, die du im published-Abschnitt deklarierst: Diese Namen sind in der RTTI gespeichert. Siehe TObject.MethodAddress.
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 13:09
Da Delphi keine Namen von Funktionen speichert, ist das so nicht möglich.

Einzige Möglichkeiten:
- definier sie als Published in einer Klasse, dann kann man dank RTTI diese auflisten
- verwende ein Array, wo die Zeiger zu den Funktionen und ihr Name drin aufgelistet wurden (natürlich von dir selber) und such dann einfach dieses Array ab
- und maximal noch die Exports-Liste (ja, die gibt es auch bei einer EXE und nicht nur bei DLLs )

[edit]
Apollonius war schneller , aber ich hab mehr
$2B or not $2B
  Mit Zitat antworten Zitat
griever

Registriert seit: 27. Apr 2008
19 Beiträge
 
#4

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 16:09
also ich versuch grad die Pointer der funktionen abzuspeichern und danach aufzurufen ... was mich wieder zum problem führt das 1.:
ich ja den inhalt des strings nicht einfach als name für den index des array setzen kann
bsp im string steht: 'abc'
und im array sollte dann stehen :
abc := @funktion();
abcd := @anderefunktion();
2.der index ja eine zahl sein muss
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#5

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 16:15
-> Dann leg dir eine Hashtable an, die sind genau dafür gedacht. Du iwrst im forum fertige implementationen dafür finden. Dann kannst du unter einem "Stringindex" was abspeichern - in deinem Fall eben nen Methodenzeiger
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 16:22
Delphi-Quellcode:
Array of record
  Name: String;
  Proc: Prozedure(a: irgendwas);
end;
da kannst du alles reinpacken und in einen Schleifchen die Namen prüfen

oder TIntegerDictionaryTIntegerDictionary Hier im Forum suchenTStringDictionary oder auch Hier im Forum suchenTAssocArray
('ner einfach "unveränderliche" Version befindet sich in himXML_Tools.pas > Hier im Forum suchenhimXML)
$2B or not $2B
  Mit Zitat antworten Zitat
griever

Registriert seit: 27. Apr 2008
19 Beiträge
 
#7

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 16:38
also ich hab jetzt mal stark vereinfach nen normales array genommen und an 1. stelle will den pointer der funktion schreiben nur wenn ich
array[1] := @funktion(parameter1,parameter2) schreibe kommt ne fehlermeldung :
[Pascal Error] Unit1.pas(54): E2036 Variable required
wenn ich die parameter weglasse funktioniert es nur kann die funktion dann ja nichts machen.

das mit dem array of record würde ja wieder dazuführen das ich immerwieder das array nach dem namen durchsuchen müsste ich wollte aber gleich an die stelle springen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 17:01
was willst du auch die Parameter da schon angeben, wo du siese doch erst später angeben wolltest?

außerdem wird bei Angabe von Parametern die Funktion ausgeführt und nicht ein Zeiger auf diese geliefert.
Delphi-Quellcode:
type TMyFunc = function(b: Byte);
  TMyArray = array of record
    name: String;
    func: TMyFunc;
  end;
var a: TMyArray;

function TestFunc(b: Byte);
begin
end;


SetLength(a, 1);
a[0].func := TestFunc;

x := a[0].func(123);
[add]
Zitat von griever:
das mit dem array of record würde ja wieder dazuführen das ich immerwieder das array nach dem namen durchsuchen müsste ich wollte aber gleich an die stelle springen
egal was du machst, irgendwer muß immer irgendeine Liste durchsuchen, ob das nun du selber machst, oder irgendeine Komponente für dich.
$2B or not $2B
  Mit Zitat antworten Zitat
griever

Registriert seit: 27. Apr 2008
19 Beiträge
 
#9

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 17:17
Zitat von himitsu:
egal was du machst, irgendwer muß immer irgendeine Liste durchsuchen, ob das nun du selber machst, oder irgendeine Komponente für dich.
aber wenn ich nen normales array nehme und dort array[129] abfrage, werden doch nicht erst die 128 vorher überprüft ob sie = 129 sind und dann bei = 129 der wert ausgegeben oder?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: funktion aufrufen deren namen in einem string steckt

  Alt 5. Jul 2009, 17:27
Die Zahl wird von Delphi direkt verrechnet, da sie ja selber den Index/Offset darstellt.

Delphi macht also aus array[129] z.B. (@array + 129*SizeOf(Element))^, aber mit einem String ist sowas nicht möglich.
$2B or not $2B
  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 18:07 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