AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Enum mit DWORDs ??

Ein Thema von Knutifrutti · begonnen am 18. Okt 2017 · letzter Beitrag vom 18. Okt 2017
Antwort Antwort
Knutifrutti

Registriert seit: 24. Nov 2008
16 Beiträge
 
#1

Enum mit DWORDs ??

  Alt 18. Okt 2017, 09:38
Delphi-Version: 2007
Hi Leute,
ich möchte gerne einen ENUM mit sehr großen Konstanten definieren um die Lesbarkeit und Debug-Barkeit des Programmes zu verbessern.

Code:
type
  EMsgSig =
  (
    cMESSAGE_SIG_IR_Command_X64_Y32_Analog = $1E65343F, // analog IR Beams
    cMESSAGE_SIG_IR_Command_X64_Y32_Digital = $B672DFE5, // digital IR Beams
    cMESSAGE_SIG_FLOAT_Command             = $4D3D7EA3, // A 32-bit floating point value
    cMESSAGE_SIG_CLIM_Command              = $6991AA0E, // Klima-Sensoren
    cMESSAGE_SIG_CLIM_Command2              = $DEA8CA6C, // Klima-Sensoren
    cMESSAGE_SIG_LOAD_Command              = $55FBCF08, // LoadCell-Sensoren
    cMESSAGE_SIG_LOAD_Command2              = $c1e97ab7, // LoadCell-Sensoren mit Temperatur
    cMESSAGE_SIG_ZERO                      = $00000000  // cMESSAGE_TYPE_RPC_USB2CAN
  );
Leider bekomme ich bei Literalen größer $7FFFFFFF einen Compilerfehler, dass eine Konstante erwartet wird. (zweiter enum-Wert: $B672DFE5)
Ich vermute, das liegt daran, dass maximal Integer-Werte aber nicht Cardinal verwendet werden kann.
{$MINENUMSIZE 4} ... EnumDef ... {$MINENUMSIZE 1} hilft hier auch nicht weiter.

Gibts hier eine Lösung?
Ich würde gerne
1. beim Debuggen im Klartext sehen wollen, was da für eine Message angeflogen kommt und auch
2. vom Compiler gewarnt werden, wenn ich in einem Case-of einen Zweig vergessen habe.

Knulli
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Enum mit DWORDs ??

  Alt 18. Okt 2017, 09:51
Mit neueren Delphi Versionen lässt sich dein Code auf jeden Fall kompilieren (in der OH steht auch was von unsigned). Handelt es sicher hierbei evtl. um eine Limitierung deiner 2007er Version? Oder verwendest du das Enum zufällig irgendwo in einem Set?

Edit:
Ansonsten musst du dir halt eine Übergangsfunktion der Form function TranslateValue(OrdinalValue: Cardinal): EMsgSig deklarieren (und EMsgSig dann einfach von 0..N statt mit festen Werten). Müsstest du dann in der entsprechenden Funktion aber drauf achten, dass auch alle Werte korrekt übersetzt werden können.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (18. Okt 2017 um 09:56 Uhr)
  Mit Zitat antworten Zitat
Knutifrutti

Registriert seit: 24. Nov 2008
16 Beiträge
 
#3

AW: Enum mit DWORDs ??

  Alt 18. Okt 2017, 11:16
OK, also endlich mal Umstellen auf XE...

Ist ne "BER-Baustelle"
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Enum mit DWORDs ??

  Alt 18. Okt 2017, 14:33
Einfach als String definieren?
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.010 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Enum mit DWORDs ??

  Alt 18. Okt 2017, 18:42
Auch 2009 kann das.
Kannst du den Wert als -1233985563 definieren? Das wäre ja genau dasselbe.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 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