Zitat:
Copy(MyPtr, 1, 5)
Copy arbeitet mit Strings, also wird der kompette PChar, bis zur nächsten #0 in einen String kopiert, dann davon via Copy ein Teil rauskpiert und zum Schluß der String wieder freigegeben.
Nimm da lieber SetString.
Beispiel:
Delphi-Quellcode:
var
MyString: String;
MyPtr: Pointer;
begin
MyString := 'Hallo Welt';
GetMem(MyPtr, Length(MyString));
try
Move(MyString[1], MyPtr^, Length(MyString)); // "Hallo Welt" steht nun im Pointer
Finalize(MyString);
SetLength(MyString, 5);
Move(MyPtr^, MyString[1], 5); // "Hallo" wird aus dem Pointer kopiert
finally
FreeMem(MyPtr);
end;
end;
...
Und jetzt haben wie wieder vergessen, daß es
Unicode gibt und schon is der String futsch
Menno, ich finde es nicht mehr, aber ich dachte ich hätte mal eine Funktion gesehn (direkt im Delphi), welche einen String nimmt und einem daraus einen PChar erzeugt. Also das GetMem und Move direkt verbaut, wo man dann nicht an
Unicode denken muß.