Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktionsname im COde nutzen (https://www.delphipraxis.net/203768-funktionsname-im-code-nutzen.html)

t2000 21. Mär 2020 18:30

Delphi-Version: 10.3 Rio

Funktionsname im COde nutzen
 
Gibt es eine Möglichkeit, in einer function/procedure den Namen der function/procedure im Code zu nutzen?

Folgendes Beispiel:

Delphi-Quellcode:
function MachWas( input: string): integer;
begin
  ShowMessage( 'Die Funktion heißt: '+ function_name);
end;
Anzeigen soll die Funktion dann: "Die Funktion heißt: MachWas"

Gibt es sowas?

Grund: Ich habe bei ganz ganz vielen Funktionen für den Fehlerfall Results, die die Location mitliefern. Z.B. 'Unitname.Class.Methodenname'

Klar. Ich kann das als String 'MachWas' reinschreiben. Ab für ein vielfaches Cut'n Copy wäre soetwas nicht schlecht. ;-)

VG
Thomas

DieDolly 21. Mär 2020 19:11

AW: Funktionsname im COde nutzen
 
Guck mal da.
How To Get the Name of the Current Procedure/Function in Delphi (As a String)

Rollo62 21. Mär 2020 19:16

AW: Funktionsname im COde nutzen
 
Mit Assert, würde ich aber nicht empfehlen (sondern abraten).
https://stackoverflow.com/questions/...tion-without-u

Dennis07 22. Mär 2020 05:03

AW: Funktionsname im COde nutzen
 
Kurz und knackig: Es geht allgemein betrachtet nicht. Du kannst über die Debug-Info beispielsweise so etwas machen, nur ist die in der Release-Konfiguration beispielsweise nicht verfügbar.

himitsu 22. Mär 2020 07:28

AW: Funktionsname im COde nutzen
 
Zitat:

Zitat von Dennis07 (Beitrag 1460294)
nur ist die in der Release-Konfiguration beispielsweise nicht verfügbar.

doch

Niemand verbietet dir in dieser Config die MAP-Datei, die externen Debuginfos und/oder Delphi-Debuginfos zu aktivieren.

Es gibt auch einige MAP zu DBG Converter, womit dann auch die Debug-API von Windows zurecht kommt.
https://docs.microsoft.com/en-us/win...help-functions > Symbol Handler
Es wäre natürlich viel zu einfach, wenn Delphi auch die Internen Debug Infos erzeugen würde, so wie jeder andere normale Windows PE-erzeugende Compiler.

dummzeuch 22. Mär 2020 09:31

AW: Funktionsname im COde nutzen
 
Gibt es nicht seit einer der neuern Delphi-Versionen sowas wie TClass.ImplementationUnit und ähnliche Funktionen? Mein Gedächtnis lässt mich da gerade im Stich, aber irgendwas in der Richtung war da.

Uwe Raabe 22. Mär 2020 09:49

AW: Funktionsname im COde nutzen
 
TObject.UnitName

dummzeuch 22. Mär 2020 10:38

AW: Funktionsname im COde nutzen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1460303)

Ja, das war's. Danke.

Hilft aber bei der Frage des OP leider auch nicht weiter. Ich hatte in Erinnerung, dass es noch weitere solcher Funktionen gab, aber das scheint nicht so zu sein.

himitsu 22. Mär 2020 11:52

AW: Funktionsname im COde nutzen
 
"neuere" ... seit bestimmt schon mindestens über einem dutzend Jahren findet man die Unit und das Modul (EXE/DLL/BPL) in der Typinfo, also von dort wo es deklariert wurde.

Aber Infos der Implementation (Aufrufer/Ersteller und die Position) gibt es nicht.


In uralten Delphis vor D7 war es noch bedingt möglich sich ins PreCompile reinzuhängen und sowas wie eine Makro-Funktion nachrüsten, aber das war einmal.
Jemand hier aus dem Forum hatte da mal das __FILE__, __LINE__, und __FUNCTION__ vom PHP nachgebaut.
https://www.delphipraxis.net/59965-s...__-delphi.html

Einzige Möglichkeit
Weg von Delphi und wechseln zum C++Builder, aber da gibt es bestimmt besserere C++-Compiler.
http://docwiki.embarcadero.com/RADSt...defined_Macros

t2000 22. Mär 2020 13:20

AW: Funktionsname im COde nutzen
 
:-)
Da habe ich ja eine interessante Diskussion losgetreten.
Ich werde für mich jetzt die Namen einfach reinschreiben. Sooo wichtig/dringend ist es für mich nicht. Habe einfach in meinem ErrorMessage-System eine "Location"-String Variable drin, die mir die Position mitteilt. Ist bei einem größeren System mit Error-Klassen sehr hilfreich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Seite 1 von 2  1 2      

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