Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Leere Records... (https://www.delphipraxis.net/156588-leere-records.html)

Aphton 8. Dez 2010 02:40

Delphi-Version: 5

Leere Records...
 
dienen wozu?

Delphi-Quellcode:
type
  TBlub = record
    A: String;
    {...}
    B: record end;
  end;
Danke im voraus,
MfG

mkinzler 8. Dez 2010 05:18

AW: Leere Records...
 
Z.B als Platzhalter für zukünftige Erweiterungen

himitsu 8. Dez 2010 08:39

AW: Leere Records...
 
Das ist wie mit den 0-Arrays.

Delphi-Quellcode:
c = array[0..0] of irgendwas;
Es gibt oftmals (ich nenn sie mal) Zugriffsarrays, welche für nicht zur Datenhaltung, sondern nur zu besseren Zugriff auf einen anderen Puffer diehnen.

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:
Record End;
ist immer 0 Byte, wärend
Delphi-Quellcode:
Array[0..0]
leider noch 1 Feld enthält.

Bei
Delphi-Quellcode:
[0..0]
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.
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]
.

Aphton 8. Dez 2010 11:40

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:
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;
MfG

p80286 8. Dez 2010 11:51

AW: Leere Records...
 
wie wäre es mit:
Delphi-Quellcode:
tDopByte = packed record
              low : byte;
              high : byte;
         end;
        pDopByte=^tDopByte;
mit pDopByte kannst Du 16Bit Werte (Word) in das High und Low-Byte zerlegen ohne eine Funktion hierfür zu bemühen.

Gruß
K-H

edith: kein roter Kasten?

Aphton 8. Dez 2010 12:05

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 12:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz