Hoi
Ik probeer de inhoud van een Record weg te schrijven naar een MemoryStream, de stream heb ik elders weer nodig.
Wat ik ook doe, ik krijg de size van de record weggeschreven, niet de size met de inhoud van de Array (fixed size array werkt prima).
Hoe kan ik dit het beste aanpakken?
Alvast bedankt,
Herby
Code:
program ArrayRecordTest;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
System.Classes;
//---------------------------------------------------------------------------\\
type
TByteArray = array of byte;
//---------------------------------------------------------------------------\\
function StrToByteArray(aValue: String): TByteArray;
var
I : integer;
begin
SetLength(result, Length(aValue));
for I := 0 to Length(aValue) - 1 do
result[I] := ord(aValue[I + 1]);
end;
//---------------------------------------------------------------------------\\
function ByteArrayToStr(aValue: TByteArray): string;
var
I : integer;
Ch : char;
begin
result := '';
for I := Length(aValue)-1 Downto 0 do
begin
Ch := Chr(aValue[I]);
result := Ch + result;
end;
end;
//---------------------------------------------------------------------------\\
type
TMyRecord = record
a : byte; // 1 byte
b : integer; // 4 bytes
cLen : integer; // 4 bytes
c : TByteArray; // 4 bytes --> zonder inhoud
d : array [1..5] of byte; // 5 bytes
end; //18 bytes
var
MyRecord : TMyRecord;
MS : TMemoryStream;
I : byte;
const
MyString = 'BlahBlahBlahBlah'; // 16 bytes
begin
// Fill MyRecord
FillChar ( MyRecord, SizeOf(MyRecord), #0);
MyRecord.a := 1;
MyRecord.b := 2;
MyRecord.cLen := Length(MyString);
MyRecord.c := StrToByteArray(MyString);
for I := 1 to 5 do
MyRecord.d[I] := I;
WriteLn ('c = ' + ByteArrayToStr(MyRecord.c));
// Fill MemoryStream with MyRecord
MS := TMemoryStream.Create;
try
// dit Scrijft de groote naar de MS, niet de inhoud + de bytearray.
MS.Write(MyRecord, SizeOf(MyRecord));
MS.SaveToFile('output.dat');
finally
MS.Free;
end;
readln;
end.
Bookmarks