AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Name der aufrufenden procedure/function ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Name der aufrufenden procedure/function ermitteln

Ein Thema von StefanL34 · begonnen am 17. Jan 2004 · letzter Beitrag vom 23. Jan 2004
Antwort Antwort
StefanL34

Registriert seit: 22. Apr 2003
4 Beiträge
 
#1

Name der aufrufenden procedure/function ermitteln

  Alt 17. Jan 2004, 17:22
Hallo Delphi-Communitiy,

wie kann man den Namen einer aufrufenden procedure ermitteln?


Beispielcode:

Delphi-Quellcode:

procedure ABC;

begin
  XYZ;

end;

procedure UVW;

begin

  XYZ;
end;

procedure XYZ;

begin
  ...
end;
dabei soll INNERHALB der procedure XYZ ermittelt werden ob sie von "ABC" oder "UVW"
aufgerufen wurde.

Bin Dankbar für jeden Hinweis

wenn es nicht in dieser allgemeinen Form geht, dann vielleicht wenigstens
wenn die procedure zu einer Klasse gehören
oder kann man durch Übergabe von Sender: TObject
oder VonKomp : TComponent

also mit
procedure XYZ(VonKomp : TObject);

oder so ähnlich sowas realisieren?

Bin dankbar für jeden Hinweis

viele Grüße

Stefan
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#2

Re: Name der aufrufenden procedure/function ermitteln

  Alt 17. Jan 2004, 17:25
jup, ich würds mit parameter machen...
als string, als TObject, oder als pointer auf die Prozedur...
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
StefanL34

Registriert seit: 22. Apr 2003
4 Beiträge
 
#3

Re: Name der aufrufenden procedure/function ermitteln

  Alt 17. Jan 2004, 19:35
Hallo Skiron,

vielen Dank für Deine Antwort.

Jetzt habe ich vergessen oben zu posten,
dass ich gerne eine Beispielcode dazu hätte.

Klar ich kann einen Zeichenkette Parameter übergeben.
Aber dann muss ICH mir bei jedem Aufruf die Arbeit machen
die Zeichenkette einzugeben.

Das ist jedoch genau das was ich vermeiden will.

Ich hätte gerne eine Möglichkeit das der Aufruf IMMER gleich aussieht.
OHNE extra-Parameter

Delphi bietet so viele Möglichkeiten den Code zu beeinflussen
bzw. Details abzufragen. Da gibt es doch bestimmt auch was
mit dem man die aufrufende procedure aus dem schon vorhandenem
ermitteln kann.


In C habe ich dazu etwas von "Stack-Tracing" gelesen.

Vielleicht muss man ja nur "WISSEN" wie man
Sender.ClassInfo
Sender.MethodName oder was weiß ich
tricky miteinander in einer function GetCallingName verknüpft um zu erreichen dass

Delphi-Quellcode:
procedure ABC;

begin
  blabla;
  XYZ;
end;



procedure XYZ;

var
  CalledFrom : string;

begin
  CalledFrom := GetCallingName;
end;

das GetCallingName "ABC" zurückgibt


vielen Dank schon im Voraus für

Code-Vorschläge

viele herzliche Grüße

Stefan
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#4

Re: Name der aufrufenden procedure/function ermitteln

  Alt 17. Jan 2004, 19:57
wenn dus ohne machen möchtest, könntest du echt den Stack auslesen
das könntest du mit assembler machen und mit push und pop irgendwie arbeiten
da kenn ich mich aber nicht so gut aus, sry...
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Name der aufrufenden procedure/function ermitteln

  Alt 18. Jan 2004, 06:32
In einem normalen Delphi-Programm sind die noetigen Informationen nicht enthalten.
Es wird zumindest das MAP-File mit den Namen der Methoden und Funktionen benoetigt.

In diesem Fall wuerde ich dir aber zu einem Parameter raten. Also ABC gibt seinen Namen einfach an XYZ weiter.

Die Alternative waere z. B. die Jedi Code Library http://sourceforge.net/projects/jcl und die
darin enthaltene Debug Extension. Dort wird das MAP File beim Kompilieren erzeugt, komprimiert und an das EXE angehaengt.
  Mit Zitat antworten Zitat
marvin.maybe

Registriert seit: 12. Jan 2004
17 Beiträge
 
#6

Re: Name der aufrufenden procedure/function ermitteln

  Alt 23. Jan 2004, 17:39
Zitat:
dabei soll INNERHALB der procedure XYZ ermittelt werden ob sie von "ABC" oder "UVW"
aufgerufen wurde.
Ein schöner Weg wäre aus meiner Sicht, wenn Du in der aufgerufenen Prozedur XYZ einen Parameter definieren würdest - z.B.
Code:
iCallerGroupID: string
der von den aufrufenden Prozeduren gefüllt wird.

Prozedurenamen sollte vom Compiler nicht mit in den Code übernommen werden. Bestenfalls könnte man ihn aus Debug-Informationen ermitteln (die bei der Auslieferung dann nicht mehr mit eingebunden sind). Allerdings würde ich das nicht machen.

Gruß,
Marvin.
  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 04:32 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