Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Enum mit DWORDs ?? (https://www.delphipraxis.net/194111-enum-mit-dwords.html)

Knutifrutti 18. Okt 2017 08:38

Delphi-Version: 2007

Enum mit DWORDs ??
 
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

Zacherl 18. Okt 2017 08:51

AW: Enum mit DWORDs ??
 
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
Delphi-Quellcode:
function TranslateValue(OrdinalValue: Cardinal): EMsgSig
deklarieren (und
Delphi-Quellcode:
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.

Knutifrutti 18. Okt 2017 10:16

AW: Enum mit DWORDs ??
 
OK, also endlich mal Umstellen auf XE...

Ist ne "BER-Baustelle" :-)

bra 18. Okt 2017 13:33

AW: Enum mit DWORDs ??
 
Einfach als String definieren?

Redeemer 18. Okt 2017 17:42

AW: Enum mit DWORDs ??
 
Auch 2009 kann das.
Kannst du den Wert als -1233985563 definieren? Das wäre ja genau dasselbe.


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