Groesse := (wfd.nFileSizeHigh * (MAXDWORD)) + wfd.nFileSizeLow;
Ist die Berechnung falsch?
JA
Delphi erweitert Typen automatisch nur auf 32 Bit, solange alle Typen maximal 32 Bit sind, mit dem selben Vorzeichen (SIGNED- und UNSIGNED-Typen)
Das macht der Compiler aus deinem Code:
Groesse := (LongWord(wfd.nFileSizeHigh) * LongWord(MAXDWORD)) + LongWord(wfd.nFileSizeLow);
Aber du willst ja eher
Groesse := (UInt64(wfd.nFileSizeHigh) * LongWord(MAXDWORD)) + LongWord(wfd.nFileSizeLow);
[edit] Natürlich auch das MAXDWORD+1 beachten ... siehe Vorredner
Oder besser noch
Groesse := (UInt64(wfd.nFileSizeHigh) shl 32) or wfd.nFileSizeLow;
Int64 oder UInt64, jenachdem wie
Groesse
deklariert ist (aber es sollte natürlich eher UInt64 sein)
PS: In deinem Fall hättest du den Typ-Fehler sofort gefunden, wenn du in den Projektoptionen einmal die
Bereichsprüfung Überlaufprüfung aktiviert hättest.
PS2: Man könnte auch Casten, statt rechnen/schieben -> Int64Rec oder LARGE_INTEGER