Hallo,
ich komme nicht weiter, folgende Funktion (Auszug) lädt falsche Dateiinhalte bei Verwendung in D2010, unter XE7 ist es korrekt:
Delphi-Quellcode:
...
Stream.ReadBuffer(loadcount, SizeOf(Integer)); //das sind 4 Bytes
For i := 1 to loadcount do
begin
FillChar(AFieldRec, SizeOf(AFieldRec), #0);
Stream.ReadBuffer(AFieldRec.Flags, SizeOf(LongWord)); //das sind 4 Bytes, im Original ist es DWord
Stream.ReadBuffer(AFieldRec.Pos, SizeOf(TRect)); //16 Bytes
if FRMVersion < 110 then
Stream.ReadBuffer(AFieldRec.Typ, 1)
else
Stream.ReadBuffer(AFieldRec.Typ, SizeOf(TFieldTyp)); //2 Byte
if AFieldRec.Typ = ft_Static then
begin
AFieldRec.UseTextH := true;
Stream.ReadBuffer(TextSize, SizeOf(Integer)); //4 Bytes
AFieldRec.TextH := GlobalAlloc(GMEM_FIXED, TextSize);
Stream.ReadBuffer(GlobalLock(AFieldRec.TextH)^, TextSize);
end
else
begin
Stream.ReadBuffer(AFieldRec.FontSize, SizeOf(Integer)); //4 Bytes
Stream.ReadBuffer(AFieldRec.FontAttr, SizeOf(Integer)); //4 Bytes
Stream.ReadBuffer(AFieldRec.TextAlign, SizeOf(Integer)); //4 Bytes
Stream.ReadBuffer(AFieldRec.TextColor, SizeOf(Integer)); //4 Bytes
Stream.ReadBuffer(TextSize, SizeOf(Integer)); //4 Bytes
SetLength(AFieldRec.FontName, TextSize);
Stream.ReadBuffer(Pointer(AFieldRec.FontName)^, TextSize); //ist als TTXString deklariert
end;
end;
...
Ich habe mal meine Anzahl Bytes dahinterkommentiert.
Hat jemand eine Idee anhand des Codeschnipsels, was da schiefläuft?
Vermutung:
Delphi-Quellcode:
type
TTXString = AnsiString;
AFieldRec.FontName :TTXString;
Bin über jede Idde dankbar!
Ciao
Stefan