Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Typen in Methoden erzeugen keine RTTI (https://www.delphipraxis.net/160595-typen-methoden-erzeugen-keine-rtti.html)

s.h.a.r.k 21. Mai 2011 16:28

Delphi-Version: XE

Typen in Methoden erzeugen keine RTTI
 
Manchmal frage ich mich echt, was sich die Entwickler des Compilers gedacht haben... Ich bin gerade durch Zufall auf ein eher komisches "Problem" gestoßen -- vielleicht sehe auch nur ich das als Problem an. Im einfachsten Fall sieht das jedenfalls so aus:
Delphi-Quellcode:
  procedure PrintEnumTypeName();
  type
    TProcedureEnum = (peOne, peTwo, peThree);
    TProcedureEnums = set of TProcedureEnum;
  var
    TI : PTypeInfo;
  begin
    TI := TypeInfo(TProcedureEnum);
    if (TI <> nil) then
      Writeln(TI^.Name);
  end;
Wenn ich das Compilieren will, meldet der Compiler mir folgende Meldung:
Code:
[DCC Fehler] EnumTypeInfoTest.dpr(50): E2134 Typ 'TProcedureEnum' besitzt keine Typinformation
Okay, kann man wahrlich anders schreiben, aber WOZU? Ich brauche diesen Typen hier nur temporär in dieser einen Methode. Wenn ich Typen innerhalb von Klassen oder Records definiere sind Typeinformationen vorhanden, nur hier nicht. Kennt jemand vielleicht den Grund dafür? Ich kann mir das auf Anhieb nicht so wirklich erklären.

Lustig wird das ganze aber dann, wenn man dieses Problem mit Generics kombiniert, denn dann erscheint zur Compilezeit keine Fehlermeldung, sondern nur zur Laufzeit. Und da dann zu merken, woher der Wind pfeift? :gruebel: Ich bin recht schnell darauf gekommen, da mein Code die Typeinformationen abfrage und entsprechend agiert.

rollstuhlfahrer 21. Mai 2011 17:39

AW: Typen in Methoden erzeugen keine RTTI
 
Setzte mal testweise den Compilerschalter
Delphi-Quellcode:
{$M+}
. So müssten eigentlich Typ-Informationen für zumindest die nachfolgende Typendeklaration erzeugt werden.

Bernhard

s.h.a.r.k 21. Mai 2011 17:44

AW: Typen in Methoden erzeugen keine RTTI
 
Nein, leider nicht. Ich habe es mal nur um die beiden Typen gesetzt, dann um die Procedure und dann mal ganz an den Anfang des Projekts, immer die gleiche Meldung.

Mir persönlich macht das eigentlich auch wenig, ich würde nur gerne den Grund wissen, in so fern jemand diesen kennt oder sich vorstellen kann, warum es so ist, wie es ist. Ich komme glaub selten bis nie in die Versuchung so zu programmieren :)

Stevie 21. Mai 2011 18:02

AW: Typen in Methoden erzeugen keine RTTI
 
Ich denke, es handelt sich an der Stelle eher um ein Enum spezifisches Problem. Trags mal in QC ein. Wenn du nämlich ne lokale Record Definition z.B. hast geht das.
Was sie sich dabei gedacht haben? Eventuell solltest du das mal Barry Kelly fragen, er kann dir bestimmt Gründe für die eine oder andere Designentscheidung nennen.

USchuster 22. Mai 2011 11:06

AW: Typen in Methoden erzeugen keine RTTI
 
Zitat:

Zitat von Stevie (Beitrag 1102122)
Ich denke, es handelt sich an der Stelle eher um ein Enum spezifisches Problem. Trags mal in QC ein.

Ja, bitte und dann hier die Nummer posten.

Zitat:

Zitat von Stevie (Beitrag 1102122)
Was sie sich dabei gedacht haben? Eventuell solltest du das mal Barry Kelly fragen, er kann dir bestimmt Gründe für die eine oder andere Designentscheidung nennen.

Barry ist bei Stack Overflow sehr aktiv und da könnte er die gleiche Frage posten.


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