Hallo Gausi!
Bei mir kommt da "Anwendung wird wegen eines ungültigen Vorgangs geschlossen" - genauso nichtssagend.
Erklärung:
Bei einem dimensionierten (statischen) Array (array [0..99]) steht an der Adresse der Speichervariablen das erste Feldelement im Speicher, die anderen folgen im Gänsemarsch. Deshalb klappt der Blockread mit dimensionierten Arrays.
Bei einen dynamischen Array enthält die Array-Variable nur einen Pointer auf den Datenbereich (4 Byte groß) - diesen zu manipulieren ergibt wenig Sinn und führt zum Absturz, weil die nachfolgenden Speicherstellen überschrieben werden!
Das Ganze muß so geschrieben werden:
Delphi-Quelltext
1:
| blockread(F,buffer[0],200); |
dann klappt's auch mit'm Blockread.
Die einzelnen Elemente des Arrays stehen nämlich nacheinander im Speicher, die Variable zeigt auf diese Anordnung. Ein solcher Zugriff darf also nicht auf die Variable erfolgen, sondern es muß das erste Element genommen werden.
Diese Schreibweise wäre auch bei einem statischen Array anwendbar - allerdings muß das nicht bei 0 beginnen!
Delphi-Quelltext
1:
| var buffer: array [10000..10099] of char; |
wäre z.B. auch zulässig!
Gruß
Dietmar Brüggendiek