Einzelnen Beitrag anzeigen

Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#1

Delphi 2009 und Datei I/O bzw. "absolute" hat sich

  Alt 19. Jul 2009, 14:53
Hallo,
ich habe mir gerade die Trial von Delphi 2009 installiert.
Mein Delphiprojekt (BDS2006) funktionierte bisher Fehlerfrei.
Unter Delphi 2009 gibt es aber Probleme:

Problem1 mit Datei I/O:
Delphi-Quellcode:
function TTest.daten_aus_datei_lesen(_dateiname: string): string;
var
  _daten: string;
  F: file of char; // wenn ich F zum Typ TextFile mache, dann geht es
  c: char;
begin
  try
    AssignFile(F, _dateiname);
    Reset(F);
    _daten := '';
    while not eof(f) do begin
      Read(F, c); // hier werden ZWEI Bytes gelesen - obwohl F doch vom Typ char ist...??? Verstehe ich nicht!
      _daten := _daten + c;
    end;
    CloseFile(F);
  except
    _daten := '';
  end;
  Result := _daten;
end;
Da ich hier bereits einen Workaround hätte handelt es sich eher um eine Verständnisfrage. Dass es hier nicht sonderlich elegant ist, jedes einzelne Zeichen zu lesen, ist mir klar. Aber ich verwende dieses Read-Konstrukt auch für andere binäre Daten, die dann sofort Byteweise verarbeitet werden...

Problem2 (ohne Lösung):
Dieser Code ist nicht von mir persönlich geschrieben - deshalb tue ich mich mit dem Debugging auch erstmal schwer. (Ich habe bisher auch noch keine absolute-Anweisungen verwendet... Wobei S ja eigentlich einfach auf Source "zeigen" sollte...)
Delphi-Quellcode:
procedure RCxDecode(var RCx: TRCxContext; const Source; var Dest; Count: Integer);
var
  S: TByteArray absolute Source; // ich denke, dass das Problem mit dieser absolute Anweisung zu tun hat
  O: TByteArray absolute Dest;
  C: Integer;
  T,K: Byte;
begin
  with RCx do
    for C := 0 to Count -1 do
    begin
      Inc(I);
      T := D[I];
      Inc(J, T);
      D[I] := D[J] xor F;
      D[J] := T - F;
      Inc(T, D[I]);

      K := S[C] xor D[T]; // wenn ich hier einen Breakpoint setze, dann kann S nicht angezeigt werden - weil wegoptimiert
      O[C] := K;
      F := F xor K;
    end;
end;
Wie gesagt, unter BDS2006 läuft alles bestens - unter Delphi 2009 nicht. Hat jemand eine Idee?
Ausser BDS2006 weiter zu verwenden...

Gruß,
Poolspieler
Andreas
  Mit Zitat antworten Zitat