![]() |
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:
Warum wird da kein normaler Aufzählungstyp daraus gemacht? In C# ist das so. Fehlt vielleicht nur ein Parameter?
type
tagcharactTypeET = TOleEnum; const chBlaEC = $00000000; chBlubEC = $00000001; ... |
AW: Aufzählungstypen in IDL, TOleEnum
Weil Bezeichner in Delphi weder mit $ noch mit einer Zahl beginnen dürfen.:-D
|
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, ... ); |
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:
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.
type
tagcharactTypeET = ( chBlaEC, chBlubEC, ... ); 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:
arbeiten,
{$MinEnumSize 4}
aber bei SETs, weigert sich Borland/Embarcadero seit Jahren dort auch sowas einzuführen. |
AW: Aufzählungstypen in IDL, TOleEnum
Zitat:
|
AW: Aufzählungstypen in IDL, TOleEnum
Dennoch aufpassen ... das Zeugs aus C sind oft Bitmasten. :lol:
|
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? |
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