Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Aufzählungstypen in IDL, TOleEnum (https://www.delphipraxis.net/215447-aufzaehlungstypen-idl-toleenum.html)

freimatz 3. Jul 2024 15:24

Aufzählungstypen in IDL, TOleEnum
 
Hallo zusammen,
wir haben hier IDL-Dateien mit Definitionen für COM-Server.
Da drin hat es auch Aufzählungstypen. In der von tlibimp.exe erzeugten TLB sieht das dann z.B. so aus:
Delphi-Quellcode:
type
  tagcharactTypeET = TOleEnum;
const
  chBlaEC = $00000000;
  chBlubEC = $00000001;
  ...
Warum wird da kein normaler Aufzählungstyp daraus gemacht? In C# ist das so. Fehlt vielleicht nur ein Parameter?

Andreas13 3. Jul 2024 15:43

AW: Aufzählungstypen in IDL, TOleEnum
 
Weil Bezeichner in Delphi weder mit $ noch mit einer Zahl beginnen dürfen.:-D

kroiksm 3. Jul 2024 16:02

AW: Aufzählungstypen in IDL, TOleEnum
 
Andreas13,
doch, es geht. Aus meiner Sicht ginge es so zu definieren:

Code:
   type
      tagcharactTypeET =
      (
         chBlaEC = $00000000,
         chBlubEC = $00000001,
         ...
      );

himitsu 3. Jul 2024 16:13

AW: Aufzählungstypen in IDL, TOleEnum
 
AUFPASSEN, die $00000001 sind BitMasken, keine BitIndize.

Die Nächsten sind doch ganz bestimmt $00000002, $00000004, $00000008 und $00000010,
anstatt $00000002, $00000003, $00000004 und $00000005.

In C können hier auch mehrere Bits pro Wert/Name gesetzt sein, z.B. $00100010.


Und nach Möglichkeit besser niemals den Namen einen Wert zuweisen.
Wenn es fortlaufen ist, dann einfach nur
Delphi-Quellcode:
   type
      tagcharactTypeET =
      (
         chBlaEC,
         chBlubEC,
         ...
      );
Sonst fehlt in der RTTI die Namensliste und man bekommt bei Nutzung der TypeInfo/RTTI Probleme, z.B. wenn man Speicherwert in Namen konvertieren lassen will.

Außerdem sind ENUMs in Delphi möglichst Klein, also bei weniger als 256 Werten, ist der ENUM bloß 1 Byte groß, obwohl der Typ als DWORD (TOleEnum = Cardinal) deklariert ist, also in C standardmäßig 4 Byte.

Bezüglich ENUMs kann man hier mit
Delphi-Quellcode:
{$MinEnumSize 4}
arbeiten,
aber bei SETs, weigert sich Borland/Embarcadero seit Jahren dort auch sowas einzuführen.

freimatz 3. Jul 2024 16:16

AW: Aufzählungstypen in IDL, TOleEnum
 
Zitat:

Zitat von himitsu (Beitrag 1538565)
AUFPASSEN, die $00000001 sind BitMasken, keine BitIndize.

Die Nächsten sind doch ganz bestimmt $00000002, $00000004, $00000008 und $00000010,

Negativ :-D

himitsu 3. Jul 2024 16:29

AW: Aufzählungstypen in IDL, TOleEnum
 
Dennoch aufpassen ... das Zeugs aus C sind oft Bitmasten. :lol:

freimatz 4. Jul 2024 07:20

AW: Aufzählungstypen in IDL, TOleEnum
 
Danke Kathinka :mrgreen:

Nochmals die Frage: "Warum wird da kein normaler Aufzählungstyp daraus gemacht? In C# ist das so. Fehlt vielleicht nur ein Parameter?"
Und nochmals: bei C# geht das, da ergibt sich ein normaler Aufzählungstyp.
ChatGPT meint "aus historischen Gründen". Ist das richtig?

himitsu 4. Jul 2024 07:43

AW: Aufzählungstypen in IDL, TOleEnum
 
Weil sich das eben nicht immer direkt umsetzen ließ/lässt.
Und so ist es immer gleich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz