Das müsste ich mir mal ganz in Ruhe anschauen. Wenn es schnell gehen soll, ersetze doch testhalber mal alle PChar durch PAnsiChar und alle Char durch AnsiChar. Funktioniert es dann?
Die (
Ansi)strings nicht vergessen!
Gruß
K-H
Das habe ich gemacht, leider kommen eine Menge Fehlermeldungen:
(logisch)
fDelimiter := FormatSettings.ListSeparator (AnsiChar, Char)
...der .Listseparator ist ein (Char)
muss doch einiges umgeschrieben werden.
Ziehe mir gerade die Hilfe von E-XE3 heran.
Ein Auszug sagt:
Aufrufe von Read/ReadBuffer-Methoden von TStream
Überprüfen Sie die Aufrufe von TStream.Read/ReadBuffer, wenn Strings oder Zeichen-Arrays verwendet werden. Sehen Sie sich das folgende Beispiel an:
var
S: string;
L: Integer;
Stream: TStream;
Temp: AnsiString;
begin
// Vorhandener Code ist falsch, wenn String UnicodeString ist
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L);
// Richtig für Unicode-String-Daten
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L * SizeOf(Char)); // <<-- Geben Sie die Puffergröße in Byte an
// Richtig für Ansi-String-Daten
Stream.Read(L, SizeOf(Integer));
SetLength(Temp, L); // <<-- Temporären AnsiString verwenden
Stream.Read(Pointer(Temp)^, L * SizeOf(AnsiChar)); // <<-- Geben Sie die Puffergröße in Byte an
S := Temp; // <<-- String auf Unicode erweitern
end;