AGB  ·  Datenschutz  ·  Impressum  







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

TMemoryStream -> Speicherwillkür?!

Ein Thema von trashcandesign · begonnen am 25. Mai 2007 · letzter Beitrag vom 25. Mai 2007
Antwort Antwort
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#1

TMemoryStream -> Speicherwillkür?!

  Alt 25. Mai 2007, 10:36
Irgendwie komm ich mit dem befüllen eines TMemoryStreams nicht klar.

Folgende Prozedur:

Delphi-Quellcode:
procedure FillStream(AStream: TMemoryStream);
var
  TestStream : TMemoryStream;
  TestString : string;
begin
 TestStream := TMemoryStream.Create;
 TestString := 'TEST';

 TestStream.Write(TestString, Length(TestString));
end;
Klappt anscheinend, aber sobald ich am Ende der Prozedur der Variablen AStream TestStream zuweisen möchte:

  AStream := TestStream oder direkt AStream füllen lassen will

  AStream.Write(TestSTring, Length(TestString)); schreibt er mir nix rein?!
  Mit Zitat antworten Zitat
s03

Registriert seit: 26. Jul 2006
4 Beiträge
 
#2

Re: TMemoryStream -> Speicherwillkür?!

  Alt 25. Mai 2007, 11:01
Hallo,

probiere es mit:
TestStream.Write(TestString[1], Length(TestString));
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#3

Re: TMemoryStream -> Speicherwillkür?!

  Alt 25. Mai 2007, 11:06
Hm, weiß nicht ob es nötig ist, aber versuch doch mal:

TestStream.Seek(0,soFromBeginning); bevor du die Zuweisung machst.
  Mit Zitat antworten Zitat
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#4

Re: TMemoryStream -> Speicherwillkür?!

  Alt 25. Mai 2007, 11:19
Funktioniert leider beides nicht.

Was ich merkwürdig finde ist, dass bei:

Delphi-Quellcode:
function TMPConnection.MakeConnectionStream: TMemoryStream;
var
  TestStream : TMemoryStream;
  TestString : string;
begin
TestStream := TMemoryStream.Create;
Result := TMemoryStream.Create;
TestString := 'TEST';
TestStream.Seek(0,soFromBeginning);
TestStream.Write(TestString, Length(TestString));

Result.Seek(0,soFromBeginning);
 Result.Write(TestString, Length(TestString));
end;
TestStream anscheind gefüllt wird, währen Result leer bleibt
  Mit Zitat antworten Zitat
s03

Registriert seit: 26. Jul 2006
4 Beiträge
 
#5

Re: TMemoryStream -> Speicherwillkür?!

  Alt 25. Mai 2007, 11:40
Ich weiß es nicht, aber dies funktioniert bei mir wunderbar:
Delphi-Quellcode:
procedure TfrmHauptBaseForm.Button1Click(Sender: TObject);
var
  ms:TMemoryStream;
  str:string;
begin
  str:='Test';
  ms:=TMemoryStream.Create;
  ms.Write(str[1],Length(str));
  ms.SaveToFile('c:\tst.txt');
  ms.Free;
end;
Mann muss unbeding die Adresse des ersten Zeichens (str[1]) übergeben und nicht die Adresse des Strings.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#6

Re: TMemoryStream -> Speicherwillkür?!

  Alt 25. Mai 2007, 13:06
Dein Problem liegt in

procedure FillStream(AStream: TMemoryStream); wenn du

AStream := TestStream; machst, dann passiert nichts, denn der Parameter wird als Wert übergeben und eine Änderung des Parameters
bleibt nur in der Prozedur erhalten. Genauer gesagt, der Parameter AStream wird kopiert, und du änderst einfach nur
die lokale Variable.

Versuch mal
procedure FillStream(var AStream: TMemoryStream); Ich würde dir jedoch empfehlen, innerhalb von FillStream keinen Stream zu erzeugen, sondern
dem Aufrufer dies zu überlassen. Dann kannst du nämlich Daten an beliebiger Stelle in einem Stream speichern.


Delphi-Quellcode:


procedure FillStream(AStream: TMemoryStream);
var
  TestString : string;
begin
  if not Assigned(AStream) then
    exit; //oder raise exception
TestString := 'TEST';


AStream.Write(TestString[1], Length(TestString));
end;

var TestStream : TMemoryStream;
begin
  TestStream := TMemoryStream.Create;
....
  //hier z.B. weitere Daten schreiben

  FillStream(AStream);
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  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 18:08 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