![]() |
Delphi-Version: 5
Leere Records...
dienen wozu?
Delphi-Quellcode:
Danke im voraus,
type
TBlub = record A: String; {...} B: record end; end; MfG |
AW: Leere Records...
Z.B als Platzhalter für zukünftige Erweiterungen
|
AW: Leere Records...
Das ist wie mit den 0-Arrays.
Delphi-Quellcode:
Es gibt oftmals (ich nenn sie mal) Zugriffsarrays, welche für nicht zur Datenhaltung, sondern nur zu besseren Zugriff auf einen anderen Puffer diehnen.
c = array[0..0] of irgendwas;
Also wo man dann den Record/Array nur als Pointertyp irgendwo drüberlegt, bzw. wo der Speicher z.B. über GetMem/GetMemory verwaltet wird. In der WinAPI findet man sowas öfters, bei dynamischen Structuren, wo die Größe und/oder der Typ des Recordendes nicht fest definiert ist. Über diesen Dummy-Record hat man dann aber wenigstens einen Zugriff auf den Anfang der Zusatzdaten. PS:
Delphi-Quellcode:
ist immer 0 Byte, wärend
Record End;
Delphi-Quellcode:
leider noch 1 Feld enthält.
Array[0..0]
Bei
Delphi-Quellcode:
gibt es aber einen Bonus ... man kann zumindestens den Typen festlegen und auch über das Array zugreifen, da bei diesem Sonderfall die Bereichsprüfung des Arrays deaktiviert ist.
[0..0]
Im Arraytyp ist dann zwar nur 1 Feld definiert, aber wenn man den Array als Zeigertyp nutzt, dann steht das für
Delphi-Quellcode:
.
[0..sovielmanwill]
|
AW: Leere Records...
Hmm, ok, soweit klar. Kannst du mir bitte ein praktisches Beispiel geben, denn ich weiß iM. nicht, wie ich auf damit umgehen soll.
Edit: Moment, ich probier mal ein paar Sachen aus... Edit2: Ahh, ok, alles klar. Also ist soetwas wie ein untypisierter Pointer, wo man selber typecasten muss..
Delphi-Quellcode:
MfG
type
PBlub = ^TBlub; TBlub = record A: DWord; B: record end; end; var X: PBlub; Y: PByte; begin GetMem( Y, 256 ); try FillChar( Y^, 256, #80 ); PDWord(Y)^ := 1990; X := PBlub( Y ); showmessage( inttostr( X.A ) ); showmessage( inttostr( PByte( @X^.B )^ ) ); finally FreeMem( Y, 256 ); end; |
AW: Leere Records...
wie wäre es mit:
Delphi-Quellcode:
mit pDopByte kannst Du 16Bit Werte (Word) in das High und Low-Byte zerlegen ohne eine Funktion hierfür zu bemühen.
tDopByte = packed record
low : byte; high : byte; end; pDopByte=^tDopByte; Gruß K-H edith: kein roter Kasten? |
AW: Leere Records...
Auch wenn es ein hilfreicher Ratschlag ist, den ich schon bereits kenne, tut es imho nichts zur Sache, oder?!
Trotzdem dankeschön |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 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