![]() |
Case in Record
Hi,
ich quäl mich grad mit der Übersetzung aus MSDN für einen Record rum, und versteh nicht, wo hier der Fehler ist:
Delphi-Quellcode:
Bei PartitionInfoEx meckert die IDE "Undeklarierter Bezeichner "partitionInfoEx" in Zeile xxx
DRIVE_LAYOUT_INFORMATION_EX = record
PartitionStyle: DWORD; PartitionCount: DWORD; case Integer of 0: (Mbr: DRIVE_LAYOUT_INFORMATION_MBR); 1: (Gpt: DRIVE_LAYOUT_INFORMATION_GPT); partitionInfoEx: array of _PARTITION_INFORMATION_EX; // <-- Hier meckert die IDE end; Setze ich die Zeile über die Case-Anweisung, dann ist er zufrieden, aber mein Record wäre falsch. Ich habe gelesen, dass bei Case mit Ordinalen Type in Records kein End hinkommt? End hintersetzen geht auch nicht. Aber wir soll ich's machen? |
AW: Case in Record
Wenn ich mich recht erinnere akzeptiert Delphi Unions (case in records) ausschließlich beim letzten Feld des Records.
|
AW: Case in Record
Echt? Wie blöd ist das denn?
Und wie soll man dann sowas übersetzen?
Code:
typedef struct _DRIVE_LAYOUT_INFORMATION_EX
{ DWORD PartitionStyle; DWORD PartitionCount; union { DRIVE_LAYOUT_INFORMATION_MBR Mbr; DRIVE_LAYOUT_INFORMATION_GPT Gpt; }; PARTITION_INFORMATION_EX PartitionEntry[1]; } DRIVE_LAYOUT_INFORMATION_EX, *PDRIVE_LAYOUT_INFORMATION_EX; |
AW: Case in Record
.. wenn Du den varianten Anteil in einem eigenen Record auslagerst
und diesen "neuen" RecordType dann im urprünglichen Record verwendest? Funktioniert es dann? Grüße Klaus |
AW: Case in Record
Jepp, so funktioniert's ;)
Ist ja auch wirklich blöd.....steht sicher irgendwo in der Hilfe, aber da wär ich so nie drauf gekommen. |
AW: Case in Record
Genau, das ist meines Wissens nach die einzige Möglichkeit.
Zitat:
|
AW: Case in Record
Zitat:
![]() Zitat:
Zitat:
Da merkt man doch, wie lange man schon dabei ist: Daß Varianten ans Ende gehören war mir schon so in Fleich und Blut übergegangen - ich wäre nie darauf gekommen, daß es womöglich anders sein könnte. |
AW: Case in Record
Zitat:
:glaskugel: Der Record hat ja die Länge der "normalen" Felder Plus die Länge der größten Feld-Size-Summe des Case Eintrages. Jeder Case Eintrag kann ja mehrere Felder haben. Das ist jedoch nur was der Sizeof zurück gibt. So ein Varianten Record bot sich immer an um Speicher zu sparen (z.B. wenn man diesen in eine Datei schreibt). Da würde eine veränderliche Größe in der Mitte nix bringen. Mavarik |
AW: Case in Record
Ich meine mich zu erinnern, daß es auch so gehen könnte:
Delphi-Quellcode:
Bin mir über die korrekte Syntax nicht im Klaren.
DRIVE_LAYOUT_INFORMATION_EX = record
PartitionStyle: DWORD; PartitionCount: DWORD; case Integer of 0: (Mbr: DRIVE_LAYOUT_INFORMATION_MBR; partitionInfoEx: array of _PARTITION_INFORMATION_EX; ); 1: (Gpt: DRIVE_LAYOUT_INFORMATION_GPT partitionInfoEx: array of _PARTITION_INFORMATION_EX;); end; Gruß K-H |
AW: Case in Record
Aber wie schon erwähnt nur für das letzte member.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 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 by Thomas Breitkreuz