![]() |
Geteilte Felder in RECORDs???
Moin, moin!
Kann man in Records Felder so deklarieren, daß man auf verschiedere Art und Weise auf gleichen Speicherbereich zugreift? Soll heißen, wenn man z.B. ein Feld a: integer (4 Bytes) hat, kann man irgendwie eine Variable b: word so definieren, daß b z.B. genau auf das 2. und 3. Byte von a liegt? (nach a:=0;b:=1; sollte a dann 256 sein...) Und das ganze in einem Record (in Assembler jeht dat!) |
Moin dmw,
dat jeht auch in Delphi :mrgreen:
Delphi-Quellcode:
Beim case muss, wie auch beim case im Programm ein ordinaler Typ angegeben werden, der gross genug ist um alle Unterscheidungen zu ermöglichen (Boolean würde bei dem Beispiel nicht funktionieren, da es nur zwei verschiedene Werte kennt).
TMyVariableType =
packed record // hier der Feste Anteil (muss nicht sein): dwFeld : DWORD; sFeld : string; // und hier der variable: case byte of $01 : ( dwFeld1 : DWORD; dwFeld2 : DWORD; ); $02 : ( abFeld : array [1..4] of Byte; ); $03 : ( wdFeld : WORD; wdDummy : WORD; ); end; Die Nummerierung muss nicht lückenlos sein. Die Angaben müssen halt nur im Wertebereich des angegebenen Typs liegen. Wenn die einzelnen Varianten unterschiedlich gross sein sollen, muss man mit dem kleinsten beginnen, und dann nach Grösse aufsteigend weiter deklarieren (ist zumindest sicherer) [EDIT] Was ich noch vergessen hatte: Der Variante Teil muss am Ende der Deklaration stehen. [/EDIT] |
Vielen Dank!!! :D
Werde ich doch gleich mas ausprobieren! :bounce2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 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