Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Größe von Record ermitteln (https://www.delphipraxis.net/206877-groesse-von-record-ermitteln.html)

divBy0 5. Feb 2021 07:59

Delphi-Version: 10.3 Rio

Größe von Record ermitteln
 
Guten Morgen!

Nach längerer Delphipause bin ich wohl mal wieder zurück und hätte da gerade eine kleine Frage.

Wie kann ich denn die Größe von folgendem Record ermitteln:

Delphi-Quellcode:
  TS7RawFilePacket = packed record
    Received: TDateTime;
    PeerIPLength: Integer;
    PeerIP: string;      
    DataLength: Integer;  
    Data: Array of Byte;  
  end;
Ein SizeOf(MyS7RawFilePacket) liefert mir 24 Byte zurück, was halt nicht stimmt. Aktuell habe ich eine Funktion, die mir die einzelnen Längen addiert und zurückgibt. Hintergrund ist einfach, dass ich diese Datenpakete in eine Datei schreiben möchte. Gibt es da eine elegantere Möglichkeit?

Danke schon mal und Gruß.

venice2 5. Feb 2021 08:14

AW: Größe von Record ermitteln
 
Siehe.
https://www.delphipraxis.net/766346-post7.html

Andreas13 5. Feb 2021 08:16

AW: Größe von Record ermitteln
 
Denn
Delphi-Quellcode:
PeerIP: string;
und
Delphi-Quellcode:
Data: Array of Byte;
sind nur Pointer.
Gruß, Andreas

jziersch 5. Feb 2021 08:20

AW: Größe von Record ermitteln
 
Zitat:

Aktuell habe ich eine Funktion, die mir die einzelnen Längen addiert und zurückgibt. Hintergrund ist einfach, dass ich diese Datenpakete in eine Datei schreiben möchte. Gibt es da eine elegantere Möglichkeit?
Du hast hier einen string und ein variables array. Das sind letztlich Zeiger auf andere Datenbereiche. Du kannst daher nicht einfach diesen Record in eine Datei schreiben.

Entweder als XML schreiben oder für jeden String oder array die Länge ermitteln und schreiben, dann am Ende des Records die Daten als byte folge. Dabei ist es aber wichtig, am Anfang des record die insgesamt Länge zu vermerken.

Die Records in einer metafile (EMF) wären ein gutes Beispiel für diese Art zu speichern.

divBy0 5. Feb 2021 08:23

AW: Größe von Record ermitteln
 
Dann bleibt es so, wie es gerade ist.

divBy0 5. Feb 2021 08:30

AW: Größe von Record ermitteln
 
Zitat:

Zitat von jziersch (Beitrag 1482304)
Zitat:

Aktuell habe ich eine Funktion, die mir die einzelnen Längen addiert und zurückgibt. Hintergrund ist einfach, dass ich diese Datenpakete in eine Datei schreiben möchte. Gibt es da eine elegantere Möglichkeit?
Du hast hier einen string und ein variables array. Das sind letztlich Zeiger auf andere Datenbereiche. Du kannst daher nicht einfach diesen Record in eine Datei schreiben.

Entweder als XML schreiben oder für jeden String oder array die Länge ermitteln und schreiben, dann am Ende des Records die Daten als byte folge. Dabei ist es aber wichtig, am Anfang des record die insgesamt Länge zu vermerken.

Die Records in einer metafile (EMF) wären ein gutes Beispiel für diese Art zu speichern.

XML will ich mir beim besten Willen hier nicht antun. Die Gesamtlänge des Record steht im Fileheader, wie gesagt, es funktioniert ja wie es soll. Mir ging es nur evtl. um eine elegantere Möglichkeit die Länge zu bekommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 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