Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Name der aufrufenden procedure/function ermitteln (https://www.delphipraxis.net/14893-name-der-aufrufenden-procedure-function-ermitteln.html)

StefanL34 17. Jan 2004 16:22


Name der aufrufenden procedure/function ermitteln
 
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

Skiron 17. Jan 2004 16:25

Re: Name der aufrufenden procedure/function ermitteln
 
jup, ich würds mit parameter machen...
als string, als TObject, oder als pointer auf die Prozedur...

StefanL34 17. Jan 2004 18:35

Re: Name der aufrufenden procedure/function ermitteln
 
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

Skiron 17. Jan 2004 18:57

Re: Name der aufrufenden procedure/function ermitteln
 
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...

Robert Marquardt 18. Jan 2004 05:32

Re: Name der aufrufenden procedure/function ermitteln
 
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.

marvin.maybe 23. Jan 2004 16:39

Re: Name der aufrufenden procedure/function ermitteln
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 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