// EDIT: hatte den Tab wohl zu lange offen, ich lasse es mal trotzdem so
Ich frage mich wie das jemals funktioniert hat. Vielleicht gab es vorher ein anderes Move als
System.Move?
Move bekommt einen Puffer als ersten Parameter, d.h. du müsstest das erste Zeichen übergeben, nicht den String (was intern ja ein Pointer ist). Und warum das +1 bei der Größe? So schreibst du die eine Hälfte des Nullzeichens mit in die Datei!?
Dazu kommt, dass WriteFile genau wie Move im zweiten Parameter einen Puffer übergeben bekommt und keinen Pointer auf die Daten.
Eventuell hat sich diese Deklaration in Delphi irgendwann geändert.
So wäre es korrekt:
Delphi-Quellcode:
var
Buffer : Pointer;
Msg : String;
dwSize : DWORD;
dwBW : DWORD;
...
dwSize := Length(Msg) * SizeOf(Char);
dwBW := 0;
GetMem(Buffer, dwSize);
Move(Msg[1], Buffer^, dwSize);
Result := WriteFile(FHandle, Buffer^, dwSize, dwBW, nil);
FileClose(FHandle);
FreeMem(Buffer, dwSize);
Allerdings frage ich mich warum du das so kompliziert machst. Warum nicht einfach so?
Delphi-Quellcode:
var
Msg : String;
dwSize : DWORD;
dwBW : DWORD;
...
dwSize := Length(Msg) * SizeOf(Char);
dwBW := 0;
Result := WriteFile(FHandle, Msg[1], dwSize, dwBW, nil);