Forum: Programmieren allgemein
by Uwe Raabe,
23. Mär 2017
Das stimmt nicht!
function SetFilePointerEx(hFile: THandle; liDistanceToMove: TLargeInteger;
const lpNewFilePointer: PLargeInteger; dwMoveMethod: DWORD): BOOL; stdcall;
Einmal wird ein TLargeInteger erwartet (= Int64 s.o.) und das andere Mal ein PLargeInteger. Ein LARGE_INTEGER kommt dort überhaupt nicht vor (Integer übrigens auch nicht).
Wenn du also mit TLargeInteger bzw. mit...
Forum: Programmieren allgemein
by Uwe Raabe,
23. Mär 2017
LARGE_INTEGER ist ein Record. Versuch doch TLargeInteger, das entspriche Int64.
Forum: Programmieren allgemein
by Uwe Raabe,
23. Mär 2017
Ja, denn dann bekommst du auch wirklich einen Buffer mit N Bytes. Bei einem String wären das nämlich doppelt so viele.
var
s: string;
b: TBytes;
begin
SetLength(s, 10); // 20 Bytes
SetLength(b, 10); // 10 Bytes;
Forum: Programmieren allgemein
by Uwe Raabe,
23. Mär 2017
Auf keinen Fall! Wenn du eine Reihe von Bytes lesen willst, dann nimm TBytes - dafür ist das da.
function TAnimatePng.FGet(hFile: THandle; var sBuffer: TBytes): LongInt; // <===
var
ByttesReaded: DWORD;
LenBuf: DWORD;
begin
Result := 0;
Forum: Programmieren allgemein
by Uwe Raabe,
23. Mär 2017
Wieso benutzt du als Buffer einen string? Das kann doch nur schief gehen.
Forum: Programmieren allgemein
by Uwe Raabe,
23. Mär 2017
Wie gesagt, kommt drauf an, was du erreichen willst. Einen String der Länge BufferSize gefüllt mit #0-Zeichen?
Für ältere Delphi-Versionen geht auch
sBuffer := StringOfChar(#0, BufferSize);
Forum: Programmieren allgemein
by Uwe Raabe,
23. Mär 2017
Korrekt, ein string.Assign gibt es nicht. Was willst du denn damit erreichen? Eventuell das hier?
sBuffer := string.Create(#0, BufferSize);