![]() |
Dynamisches Array in untypisierte Datei schreiben
Hallo Ihr,
mal wieder Probleme: ich möchte gern ein dynamisches Array in eine untypisierte Datei schreiben. Als Typen habe ich dafür definiert:
Delphi-Quellcode:
Das Problem ist, wie weise ich meinem dynamischen Array "koordinaten" vom Typ TTSFCoords eine Länge zu?
type
TTSFCoord = packed array[0..2] of single; PTSFCoords = ^TTSFCoords; TTSFCoords = packed array[0..0] of TTSFCoord; Mit setLength(koordinaten,wert) bekomme ich eine Fehlermeldung: Incompatible Types. Dabei ist "wert" eine Zahl vom Typ longint. Definiere ich den Typ TTSFCoords statisch, also z.B.
Delphi-Quellcode:
so funktioniert es, und ich kann "koordinaten" mit Werten belegen.
TTSFCoords = packed array[0..2] of TTSFCoord
Lasse ich in der Typdeklaration das [0..0] weg, also
Delphi-Quellcode:
und vergebe die dann mit setLength(koordinaten,wert), so funktioniert das.
TTSFCoords = packed array of TTSFCoord;
Allerdings bekomme ich dann Fehlermeldungen, wenn ich das dynamische array in die untypisierte Datei einlesen will. Dafür definiere ich mir noch einen Zeiger koordinatenzeiger:PTSFCoords und weise dem die Adresse von "koordinaten" zu: koordinatenzeiger := @koordinaten; und schreibe in die Datei wie folgt:
Delphi-Quellcode:
wobei PointCount vom Typ longint und vorgeben ist.
BlockWrite(Datei,koordinatenzeiger^,PointCount*sizeof(TTSFCoord));
Lese ich die so erzeugte Datei nun in ein dafür vorgesehenes Programm ein, bekomme ich den Fehler Überlauf bei Gleitkomma-Operation. Nun verstehe ich nicht, warum. Ich weiss, viele Fragen auf einmal, aber vielleicht kann mir wer helfen? Danke, frea! |
Re: Dynamisches Array in untypisierte Datei schreiben
Statische und dynamische Arrays unterscheiden sich in der DL in einem wichtigen Punkt: Variablen der ersten Art sind Werttypen, Variablen der zweiten Art aber Referenztypen. D.h., eine dynamische Array-Variable ist bereits ein Zeiger auf das Array. Deshalb wäre die folgende Anweisung zum Schreiben richtig:
Delphi-Quellcode:
var
koordinaten: TTSFCoords; begin BlockWrite(Datei,koordinaten^,PointCount*sizeof(TTSFCoord)); end |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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