![]() |
Re: Definitions union von C nach Delphi
Ist bei den Delphi-Unions das case Integer of nicht mehr so eine syntaktische Sache? Ich würde jedenfalls erwarten, dass der Compiler die Größe selbstständig ermittelt.
Davon abgesehen wäre ein long double eher ein Extended in Delphi oder sowas, kein Int64. |
Re: Definitions union von C nach Delphi
Zitat:
Gruß oki |
Re: Definitions union von C nach Delphi
Ne, ich meine, einfach immer case Integer of nehmen, wenn ich das richtig verstehe, ist das doch nur dazu da, den Typ anzugeben, mit dem man die Varianten bezeichnet (also zum Beispiel 4 und 1 in Post #2, wobei ich da einfach aufsteigende Indizes verwenden würde).
Kann mich aber auch irren :) Edit: Also für dein letztes Beispiel halt
Delphi-Quellcode:
wobei ich eben die genaue Delphisyntax nicht kenne.
TReell = record
case Integer of 0: (einfach : Float); 1: (mittel : Double); 2: (hoch : Extended); end; |
Re: Definitions union von C nach Delphi
Hi OregonGhost,
und ich dachte schon ich hab es verstanden. sieht wohl doch nicht so aus. Wenn nach deiner Meinung Integer nur für eine "Indizierung" verwendet wird, dann versteh ich das mit 4 un 1 in nicodex Übersetzung gar nicht (versteh ich auch so noch nicht :roll: ). Ich glaub, ich sollte doch noch mal unter dem Stichwort variante Records nachlesen. Vielleicht bin ich dann schlauer. bis denne, Gruß oki |
Re: Definitions union von C nach Delphi
Zitat:
Nehmen wir mal einen eigenen Oridnaltyp (hier eine Aufzählung):
Delphi-Quellcode:
Und einen Record mit variantem Teil:
type
TDataType = ( dtFoo, dtBar );
Delphi-Quellcode:
Dies hilft dem lesenden Entwickler zu verstehen, wann die Daten in welcher Art und Weise zu interpretieren sind.
type
TDataBlob = record DataSize: UInt64; case DataType: TDataType of dtFoo: ( AsFoo: Integer{;} ); dtBar: ( AsBar: record Bar1: Double; Bar2: UInt64; end{;} ); { end; } end; DataType ist in diesem Falle ein Member des Records (technisch ist es das selbe wie):
Delphi-Quellcode:
Man hätte auch wie folgend definieren können:
type
TDataBlob = record DataSize: UInt64; DataType: TDataType; case TDataType of dtFoo: ( AsFoo: Integer{;} ); dtBar: ( AsBar: record Bar1: Double; Bar2: UInt64; end{;} ); { end; } end;
Delphi-Quellcode:
Das ist vom Aufbau her (fast) gleich. Nur ist es für den Lesenden (ohne weitere Dokumentation) nicht klar ersichtlich, wie die Daten des varianten Teils zu interpretieren sind (also wie man es nicht machen sollte :))...
type
TDataBlob = record DataSize: UInt64; DataType: TDataType; case Boolean of False: ( Value1: Integer{;} ); True: ( Value2: Double; Value3: UInt64{;} ); { end; } end; edit: Zitat:
(ich mache das einfach schon zu lange, um Dinge einfach so zu übersetzen, dass sie "einfach nur funktionieren") edit2: mit aktuellen Delphi-Versionen wäre ich sogar noch weiter gegangen, und hätte diverse Operatoren überladen/eingeführt (damit man zum Beispiel ein TAesInf einem LongWord direkt zuweisen kann und vis versa). Gruß Nico |
Re: Definitions union von C nach Delphi
Ahhh,
Licht am Horizont. Jetzt hab ich es wohl wirklich gerafft. So ist übrigens auch LParam und WParam in TMessage definiert. Tausendmal verwendet und nichts passiert (im Kopf :idea: ). Dank Dir Nicodex. Imho ist es dann so, dass im speziellen Fall MaxInt-Anzahl von Elementen im Record über die Case-Anweisung indiziert werden können. Integer kann nach deinen Ausführungen durch jeden ordinalen Typ ersetzt werden. Somit sollte auch ein Enum-Typ funktionieren. Dank Dir :thumb: und Gruß oki |
Re: Definitions union von C nach Delphi
Zitat:
Gruß oki |
Re: Definitions union von C nach Delphi
Zitat:
Viel Erfolg mit der weiteren Übersetzung des Headers. |
Re: Definitions union von C nach Delphi
|
Re: Definitions union von C nach Delphi
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 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