![]() |
Ein neues Problem mit dyn. Arrays
Hi allerseits!
Ich mach´s kurz:
Delphi-Quellcode:
Ergebnis via WriteBuffer(TestTyp, sizeOf(TestTyp)) (in leere Datei) im HEX-Editor:
type
TTestTyp = record TestDaten: Array [0..4] of Char; // <<<<<<<<<<<<<<<<<<<< end; (...) var TestTyp: TTestTyp; begin TestTyp.TestDaten[0] := 'H'; TestTyp.TestDaten[1] := 'a'; TestTyp.TestDaten[2] := 'l'; TestTyp.TestDaten[3] := 'l'; TestTyp.TestDaten[4] := 'o';
Delphi-Quellcode:
---
Hallo
Aber:
Delphi-Quellcode:
Ergebnis via WriteBuffer(TestTyp, sizeOf(TestTyp)) (in leere Datei) im HEX-Editor:
type
TTestTyp = record TTestDaten: Array of Char; // <<<<<<<<<<<<<<<<<<<< end; (...) var TestTyp: TTestTyp; begin SetLength(TestTyp.TestDaten, 5); // merkwürdigerweise sagt er manchmal "constant object cannot be passed as var parameter" ??? TestTyp.TestDaten[0] := 'H'; TestTyp.TestDaten[1] := 'a'; TestTyp.TestDaten[2] := 'l'; TestTyp.TestDaten[3] := 'l'; TestTyp.TestDaten[4] := 'o';
Delphi-Quellcode:
(soll symbolisieren das murks rauskommt)
`_'.}
--- Kann mir jemand helfen? Versteh ich da etwas gänzlich falsch? :oops: |
Re: Ein neues Problem mit dyn. Arrays
Bei statischen Arrays liegen die Daten an einem Stück an der gegebenen Stelle im Speicher, bei einem dynamischen nur ein Zeiger darauf.
Statt also mit
Delphi-Quellcode:
zu schreiben, musst du mit
Write*(buffer, sizeof(buffer));
Delphi-Quellcode:
schreiben.
Write*(buffer[0], Length(buffer)*sizeof(buffer[0]));
|
Re: Ein neues Problem mit dyn. Arrays
Danke, aber warum? Ich schreibe doch den Inhalt diese Typs in mein File, und das beinhaltet ja auch den Array? Versteh ich immer noch nicht so ganz, trotzdem danke!! :)
|
Re: Ein neues Problem mit dyn. Arrays
Hallo,
Zitat:
Delphi-Quellcode:
Wenn Du diesen Record nun in einer Datei speicherst, landen nur die vier Byte des Pointers in der Datei.
type
TTestTyp = record TestDaten: Pointer; end; Gruß xaromz |
Re: Ein neues Problem mit dyn. Arrays
Danke! :) Heisst das im Endeffekt, öhm ... wenn ich soetwas mache, muss ich dir Arrays aus den Typen seperat via MeinDynArray[0] usw schreiben?
Das merkwürdige ist, wenn ich den Array in diesem Type (bzw. die Größe) vordefiniere, lässt sie sich in meinem Beispiel anschließend nicht mehr ändern (?) (SetLength(MeinType.UnterTypStaticArray, 10)) (10 als Beispiel) Error: Constant object cannot be parsed as var parameter Hust - öhm - was zum ... ? :wall: :oops: EDIT: okay, denkfehler ... war ja ein statischer array... dafür SIND ja dynamische arrays ... *G* :pale: |
Re: Ein neues Problem mit dyn. Arrays
Hallo,
Zitat:
Records werden in der heutigen Zeit vor Allem benutzt, um bestimmte Strukturen in Dateien abzulegen (z. B. Header von Bitmaps). Hier ist die Länge jedes Feldes genau vorgegeben, und deshalb müssen keine dynamischen Strukturen verwendet werden. Bei Strukturen mit dynamischen Feldern ist es meist einfacher, eine Klasse zu verwenden, die eine eigene Methode zum Laden und Speichern implementiert. // Zu Deinem Edit: Ein Array mit vorgegebener Größe ist eben im Unterschied zu einem dynamischen kein Pointer auf einen Speicherbereich, sondern liegt tatsächlich an der Stelle der Variable im Speicher. Deshalb ist auch eine Größenanpassung nicht möglich. Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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-2025 by Thomas Breitkreuz