AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language "Keine Typinformationen" von Enum Type. Was könnte ich tun?

"Keine Typinformationen" von Enum Type. Was könnte ich tun?

Ein Thema von milos · begonnen am 13. Feb 2018 · letzter Beitrag vom 15. Feb 2018
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

"Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 13. Feb 2018, 02:58
Delphi-Version: 10 Berlin
Hallo Freunde,

Ich versuche durch einen String das jeweilige Enum Type zu bekommen:
Delphi-Quellcode:
var
  L2 : TFPInstruction;
begin
  L2 := TFPInstruction(GetEnumValue(TypeInfo(TFPInstruction), 'fpiMOV_REG_REG'));
end;
Normalerweise klappt das ja ziemlich gut aber in meinem Fall habe ich TFPInstruction so definiert:

Delphi-Quellcode:
  TFPInstruction = (
    fpiMOV_REG_CONST = $a0,
    fpiMOV_REG_REG = $a1,
    {...}
  );
Es scheint als würde Delphi keine Typinformationen zur Laufzeit mitliefern wenn die Enumeration NICHT bei 0 beginnt und Lücken hat, das habe ich so erfolgreich getestet. Ist dies trotzdem irgendwie möglich oder muss ich da wohl drum herum arbeiten? Wäre nämlich schon ziemlich praktisch wenn dies so gehen würde.

Der Fehler beim kompilieren ist:
Code:
[dcc32 Fehler] fMain.pas(41): E2134 Typ 'TFPInstruction' besitzt keine Typinformation
Vielen Dank und freundliche Grüsse
Milos

Geändert von milos (13. Feb 2018 um 03:03 Uhr)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
195 Beiträge
 
Delphi XE5 Professional
 
#2

AW: "Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 13. Feb 2018, 06:01
Enums mit Lücken oder jene, die nicht bei 0 starten haben keine TypInfo.
Der Grund hier ist recht einfach: Der Typ existiert zur Laufzeit nämlich überhaupt nicht mehr, sondern wird zur Designzeit in einen Standard-Ordinal aufgelöst und die Zugriffe so umgeschrieben, dass sie dann zu den entsprechenden Werten passen. Sprich: Eine Aufzählung, die nicht dem Standardformat entspricht, ist in wirklichkeit gar keine Aufzählung sondern wird vom Compiler in Ordinalzahlen gewrappt. Also keine Typinfo.
Eine Erweiterung der System.TypInfo wird dir hier auch nicht helfen, da für den Typen ja nicht nur die Typeinfo nicht gelesen werden kann, sondern sie auch aus dem oben genannten Grund gar nicht erst erzeugt werden kann (sagt die Fehlermeldung im Grunde auch schon).
Also zu deiner Frage: Nein, es ist schlichtweg nicht möglich. Die einzige Möglichkeit, die Ginge, wäre, mit einem eigenen ordinalen Aliastypen und entsprechend typisierten Konstanten zu arbeiten.
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: "Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 13. Feb 2018, 06:21
Alles Klar, vielen Dank für die genauere Erklärung warum dies nicht geht, habe mir schon so etwas in diese Richtung gedacht. Naja, ist kein Weltuntergang und wohl sowieso besser so.

Sind ja nur 10 Zeilen mehr.

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
33.818 Beiträge
 
Delphi XE3 Professional
 
#4

AW: "Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 13. Feb 2018, 12:58
Nee, umgewappt werden keine Werte,
aber der eigentliche Grund ist noch einfacher.

In der TypeInfo sind die Namen der einzelnen Werte des ENUMs in einer #0-terminierten Liste gespeichert und das Ende diese Liste ist eine #0#0 Doppelnull.

Delphi-Quellcode:
  TFPInstruction = (
    fpiMOV_REG_CONST,
    fpiMOV_REG_REG
  );
  
'fpiMOV_REG_CONST'#0'fpiMOV_REG_REG'#0#0
Ein "leerer" Name ist also das Ende.
Und wenn etwas fehlt, dann gibt es dort keinen Namen und somit ist es nicht möglich diese Liste für solche ENUMs aufzubauen.

Vor vielen vielen Jahren hatte ich im QC mal vorgeschlagen, das Fehlende einfach mit einem Dummy-Char oder dem ordinalen Wert (Zahl) aufzufüllen, aber auf mich hört ja niemand.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.368 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: "Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 13. Feb 2018, 15:06
In der TypeInfo sind die Namen der einzelnen Werte des ENUMs in einer #0-terminierten Liste gespeichert und das Ende diese Liste ist eine #0#0 Doppelnull.

Delphi-Quellcode:
  TFPInstruction = (
    fpiMOV_REG_CONST,
    fpiMOV_REG_REG
  );
  
'fpiMOV_REG_CONST'#0'fpiMOV_REG_REG'#0#0
Fast richtig, sie sind als packed utf8 shortstrings gespeichert, also so:

Code:
#16'fpiMOV_REG_CONST'#14'fpiMOV_REG_REG'
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.379 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: "Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 13. Feb 2018, 15:56
OT: Was bastelst du? Sieht interessant aus?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine (Zydis)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
33.818 Beiträge
 
Delphi XE3 Professional
 
#7

AW: "Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 13. Feb 2018, 16:38
Wo ich zuletzt guckte, wie Delphi das ausliest, da war ich mi fast sicher es war 'fpiMOV_REG_CONST'#0'fpiMOV_REG_REG'#0#0
Nach XE haben die das doch wohl nicht umgebaut.

UTF-8 ist es erst seit 2009 ... davor ANSI, aber das stört nicht, denn das alte ANSI (ASCII, wenn man nur die erlaubten Bezeichner betrachtet) ist mit UTF-8 ja kompatibel.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: "Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 13. Feb 2018, 21:56
OT: Was bastelst du? Sieht interessant aus?
Ich arbeite an einer kleinen Virtuellen Maschine/CPU mit eigenem Instruction Set und dazugehörigem Compiler und Debugger, da mich das Thema schon seit vielen vielen Jahren brennend interessiert.

Ist also nur ein "kleines" Projekt zum weiter lernen.

Das Ziel wäre dann die VM auch für Arduino (eigentlich Teensy) boards zu porten, aber sags niemandem. =D
(Programme von der SD-Karte Laden zu können ist auch schon lange mein Traum)


Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.379 Beiträge
 
Delphi 10.1 Berlin Starter
 
#9

AW: "Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 13. Feb 2018, 22:13
OT: Was bastelst du? Sieht interessant aus?
Ich arbeite an einer kleinen Virtuellen Maschine/CPU mit eigenem Instruction Set und dazugehörigem Compiler und Debugger, da mich das Thema schon seit vielen vielen Jahren brennend interessiert.
Ach cool Eine kleine VM steht auch schon ewig auf meiner Liste, aber bisher bin ich nie dazu gekommen. Viel Erfolg!
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine (Zydis)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
195 Beiträge
 
Delphi XE5 Professional
 
#10

AW: "Keine Typinformationen" von Enum Type. Was könnte ich tun?

  Alt 14. Feb 2018, 00:35
Witzig, genau das selbe habe ich auch vor einigen Wochen mal angefangen. Konnte einige ASM-Befehle decodieren und virtuell ausführen. Mit Registern, einer FPU, Stack und Heap (der aber nicht wirklich gut war...)
Dennis
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf