Autor Beitrag
Sivar
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 40



BeitragVerfasst: Di 28.01.03 13:41 
Hallo,

ich verwende ein TMemoryStream um ihn später über die NMStrm (FastNet) Komponente zu verschicken.

Bilder und Dateien kann ich ganz auch ohne Probleme in den Stream Laden, da die Objekte die Methoden SaveToStream und LoadFromStream mitbringen.

Mein Stream ist dabei so aufgebaut das zunächst ein Header in den Stream geschriben wird, der beinhaltet was im Stream gespeichert ist (Typ und Länge).

Nun möchte ich auch Strings über den Stream verschicken ohne dafür extra TStringStream nutzen zu müssen.

Jetzt zur Frage:
Wie kann ich einen String mit TMemoryStream.WriteBuffer in den Stream schreiben und Ihn später wieder rausholen?
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 28.01.03 15:52 
Hi!

Hier sind zwei nützliche Prozeduren:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure SaveStrToStream(const Stream: TStream; const Value: String);
//Schreibt einen dynamischen String in einen Stream
var Len: Word;
begin
  Len := Length(Value);
  Stream.WriteBuffer(Len, SizeOf(Len));
  if Len > 0 then
    Stream.WriteBuffer(Pointer(Value)^, Len);
end;

procedure LoadStrFromStream(const Stream: TStream; var Str: String);
//Liest einen dynamischen String aus einem Stream
var Len: Word;
begin
  Stream.ReadBuffer(Len, SizeOf(Len));
  SetLength(Str, Len);
  if Len > 0 then
    Stream.ReadBuffer(Pointer(Str)^, Len);
end;


Cu, :D
Udontknow
Sivar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 40



BeitragVerfasst: Di 28.01.03 16:42 
Super, genau auf die Art hab ich's noch nicht probiert.
Werde ich machen sobald ich heute zu Hause bin und mein Frauchen mir erlaubt an meinen PC zu gehen :)

Vielen Dank!!