AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stream Problem...

Ein Thema von igel457 · begonnen am 1. Jul 2006 · letzter Beitrag vom 1. Jul 2006
Antwort Antwort
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Stream Problem...

  Alt 1. Jul 2006, 16:26
Hallo,

ich stehe gerade auf dem Schlauch. Ich habe eine Klasse geschrieben die ihre Daten (strings) in einen Stream Speichert. Leider kommt dabei nur Müll raus...

Delphi-Quellcode:
procedure WriteString(astring:string;astream:TStream);
var c:integer;
    s:string;
begin
  s := astring;
  c := sizeof(s);
  showmessage(s+' '+inttostr(c)); //<-- hier zeigt er das richtige an
  astream.Write(c,sizeof(c));
  astream.Write(s,c);
end;

procedure TGameData.SaveToStream(AStream:TStream);
begin
  WriteString(name,astream);
  WriteString(map,astream);
  WriteString(ip,astream);
  WriteString(id,astream);
  astream.Write(typ,sizeof(typ));
end;
Ich speichere diese Daten in einen MemoryStream und dann auf Festplatte. Wenn ich mir das mit einem Hexeditor anschaue steht da aber nur Müll drin.

Woran könnte das liegen? Bei der Zeile "Showmessage" Zeigt er das richtige an. An den Daten kann es also nicht liegen...

Ich denke es liegt an der Prozedur "WriteString"...

Ich hoffe ihr könnt mir helfen,
igel457
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Stream Problem...

  Alt 1. Jul 2006, 16:28
Zitat von igel457:
Ich denke es liegt an der Prozedur "WriteString"...
Gut gedacht
Denk dran: strings und Dynamische Arrays sind im Grunde genommen das selbe. Das bedeutet, das ein String nur ein Zeiger auf den Speicherbereich ist, in dem der String wirklich steht. Also kannst du es nicht so machen wie es bei dir steht, sondern musst den Startindex mitgeben:
Delphi-Quellcode:
procedure WriteString(astring:string;astream:TStream);
var c:integer;
    s:string;
begin
  s := astring;
  c := sizeof(s);
  showmessage(s+' '+inttostr(c)); //<-- hier zeigt er das richtige an
  astream.Write(c,sizeof(c));
  astream.Write(s[1],c);
end;
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Stream Problem...

  Alt 1. Jul 2006, 16:36
Danke für die super-schnelle Antwort.
Ich hatte es auch vorher schon einmal damit ausprobiert, da hatte ich aber eine Zugriffsveletzung als Ergebniss. Das kam aber daher, dass ein Element 0 Zeichen lang war. SizeOf gibt hier aber 1 zurück. Verwende ich length anstatt SizeOf, dann funktioniert es...

Danke!
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz