Die write Operation gibt es auch in freepascal in MemoryStream und FileStream,
man muß nur wegen dem dynamischen Feld etwas aufpassen und wie dieses Deklariert wurde.
Bspw. ist es ein Multidim. Feld, in dem jede Dimension aus Dynamischen Feldern besteht? Dann sieht das so aus. (wenn 256*256 immer fest ist, versteht sich, sonst wird das auslesen zum Ratespiel)
Code: Alles auswählen
type
TField = array of Integer;
T2DField = array of TField;
...
for i:=0 to 255 do
ms.write(field2d[i][0], 256*sizeof(Integer));
Für ein Multidim. Feld das Multidim Deklariert wurde sollte es einfacher gehn.
Code: Alles auswählen
type
T2DField = array of array of Integer;
...
ms.write(field2d[0,0], 256*256*sizeof(Integer));
Allerdings bin ich mir bei der Variante nicht sicher ob das Multidim. Feld intern als mehrere 1D Felder gehandhabt wird (also ob der Compiler das zerlegt oder als ein Speicherblock handhabt.).. wenn der Output also Müll ist, dann einfach die erste Variante nutzen.
Liegt also schlicht daran, ob es aus Einzelfeldern besteht oder nicht. Ein Einzelfeld ist zusammenhängend/als Reihe von Bytes schreibbar.
Weil sie Dynamisch sind, muß man den Feldindex des ersten Elementes angeben, damit von der ersten Position des dynamisch angeforderten Speichers geschrieben wird. Analog läufts mit dem Einlesen.
PS:
ms.write(array, fieldsize*X*Y) klappt ebenfalls. Halt nur für statische Felder (also Deklariert als array[1..256,1..256] of Integer z.B.)