Einzelnen Beitrag anzeigen

skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#1

Stream Lesefunktion aus XE7 funktioniert unter D2010 nicht korrekt

  Alt 16. Mai 2019, 12:00
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
  Mit Zitat antworten Zitat