Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi enum und Case verwenden (Übersetzung aus C-Quellcode) (https://www.delphipraxis.net/139416-enum-und-case-verwenden-uebersetzung-aus-c-quellcode.html)

DelphiManiac 28. Aug 2009 11:58


enum und Case verwenden (Übersetzung aus C-Quellcode)
 
Hallo,

ich muss einen Programmablauf eines C-Programmes in Delphi abbilden und tue mir bei den Aufzählungstypen (enum) schwer.

Kurze Erklärung es geht um Fehlercodes:

1 = Fehler A
2 = Fehler B
3 = Fehler C

etc

das enum in C sieht wie folgt aus:

typedef enmum {
FAN_UNDEF = 0,
FAN_OK,
FAN_FAIL
} eFanStat_t

Ziel soll es sein, dass ich ein Byte mit dem Status zurückbekomme und dann auf die Fehlerwerte prüfe

So habe ich das enum in Delphi umgesetzt

Delphi-Quellcode:
// Lüfter-Status
eFanStat_t = (
      FAN_UNDEF = 0 // undefiniert
      FAN_OK   = 1    // fan ok
      FAN_FAIL = 2, // fan failed
      FAN_NA   = 3     // fan nicht vorhanden
);
jetzt wollte ich eine case Anweisung Ausführen um herauszufinden welcher Fehler besteht:

Delphi-Quellcode:
    case errCode of
      FAN_UNDEF:
      begin

      end;
     FAN_OK:
      begin

      end;
...
    end;
Doch hier habe ich logischerweise eine Typunverträglichkeit.
Alternative wäre die Errorcodes als Konstanten zu definieren, aber das würde ja keinen Sinn machen, schließlich will ich ja ein Enum verwenden...

Vielen Dank schonmal

Grüße
DelphiManiac

HalloDu 28. Aug 2009 12:03

Re: enum und Case verwenden (Übersetzung aus C-Quellcode)
 
Hallo DelphiManiac,

ich gehe mal davon aus, dass errCode ein Integer ist. Damit du errCode dann in deiner Case-Abfrage benutzen kannst, musst du errCode nur auf deinen Enumerationstyp casten.

Delphi-Quellcode:
case eFanStat_t(errCode) of
...
MfG Freddy

himitsu 28. Aug 2009 12:05

Re: enum und Case verwenden (Übersetzung aus C-Quellcode)
 
dann wirst du wohl den Type der Variable errCode ändern müssen und alles was damit zu tun halt (z.B. die Rückgabeparameter von Funktionen)

oder du konvertierst einen der Werte
Delphi-Quellcode:
case eFanStat_t(errCode) of
  FAN_UNDEF:


case errCode of
  Ord(FAN_UNDEF):

DelphiManiac 28. Aug 2009 12:11

Re: enum und Case verwenden (Übersetzung aus C-Quellcode)
 
Hallo himitsu,

danke für deine Antwort,
ich habe es jetzt nach deinem ersten Vorschlag gelöst mit der Typumwandlung!

Vielen Dank, hatte es erst fälschlicherweise so probiert

(errcode as eFanStat_t) das ging aber nicht,...

Gruß
DelphiManiac


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