Nja, das ist ein 32-Bit UInt und wenn man da alles um 32 Bit nach links verschiebt, dann rutscht alles raus und ist weg.
Der Compiler kommt auch nicht immer auf die Idee sowas von sich aus einfach so zu vergrößern (normal maximal bis zur Größe eines Registers)
So
:= Int64(TempSize.nFileSizeHigh) shl 32 or TempSize.nFileSizeLow;
wäre es demnach schon sicherer,
aber wie schon genannt ... Warum nicht einfach F.Size, anstatt F.FindData.nFileSize* ?
PS: Da wir hier Signed rechnen, ist es binär sicherer, als arithmetisch.
OK, man könnte auch
:= Int64(UInt64(TempSize.nFileSizeHigh) shl 32) + TempSize.nFileSizeLow;
, aber warum.
z.B. gäbe es Probleme und die Größe wäre z.B. -1, dann würde es nach Umrechnung mit einer signed Addition einen anderen Wert ergeben.
Alternativ einfach nur casten und garnicht rechnen.