Einzelnen Beitrag anzeigen

Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: String(unicode) in einen Stream speichern/Laden

  Alt 5. Jan 2010, 12:10
@himitsu:

Es war mir schon klar das ich den String selber in den Stream schreiben muss.
Nur welche Stringtypen verwende ich das es unter den oben genannten Delphi-Version einwandfrei funktioniert und dabei Unicode unterstüzt ?

Hier ein wenig Code-Bsp.:
Delphi-Quellcode:
{ TDummyTest }


procedure TDummyTest.SaveToStream(AStream: TStream);
Var iLen : SmallInt;
begin
  AStream.Position := 0;
  AStream.Size := 0;
  AStream.Write(FIdent,SizeOf(Integer));
  AStream.Write(FKind,SizeOf(Integer));
  iLen := Length(FStr1);
  AStream.Write(iLen,SizeOf(iLen));
  AStream.Write(PChar(FStr1)^,iLen); // Hier PChar oder doch PWideChar ?
  AStream.Write(FRes,SizeOf(SmallInt));
end;

procedure TDummyTest.LoadFromStream(AStream: TStream);

    procedure ReadStr(Var sTarget : String);
    Var iLen : SmallInt;
        pch : PChar; // oder PWideChar ?
        buffer : array[0..4096] of char; // Alternativ
    begin
      AStream.Read(iLen,SizeOf(SmallInt));
      GetMem(pch,iLen);
      try
      //AStream.Read(pCh^,iLen);
      
      // alternativ
      AStream.Read(buffer[0],iLen);
      sTarget := copy(buffer,1,4);
      finally
        FreeMem(pCh,iLen);
      end;
    end;

begin
  AStream.Read(FIdent,SizeOf(Integer));
  AStream.Read(FKind,SizeOf(Integer));

  ReadStr(FStr1);

  AStream.Read(FRes,SizeOf(SmallInt));
end;
Wie bekomm ich diesen Code, funktionsfähig für alle Zeichensätze und unter D2007 + D2010 lauffähig ?

Danke,

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat