AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Stream als Rückgabewert einer Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Stream als Rückgabewert einer Funktion

Ein Thema von Alibi · begonnen am 2. Jun 2004 · letzter Beitrag vom 2. Jun 2004
Antwort Antwort
Alibi

Registriert seit: 15. Aug 2003
Ort: Bispingen
94 Beiträge
 
Delphi 7 Personal
 
#1

Stream als Rückgabewert einer Funktion

  Alt 2. Jun 2004, 00:11
Hi,
ich versuche hier gerade eine Funktion zu schreiben, die mir einen Stream zurückliefert, aber irgendwie will das hier nicht. Ich hab als vereinfachtes Beispiel, um andere Fehlerquellen auszuschließen das hier eben gemacht, aber selbst das will nicht:
Delphi-Quellcode:
function teststream: TMemoryStream;
var
  source: TFileStream;
  buf: array [0..1024] of char;
  numread: integer;
begin
  source := TFileStream.Create('add.bmp',fmOpenRead);
  numread := source.Read(buf, sizeof(buf));
  result := TMemoryStream.Create;
  result.WriteBuffer(buf, numread);
  source.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitMap;
begin
  bmp := TBitMap.Create;
  bmp.LoadFromStream(teststream);
  bmp.SaveToFile('test.bmp');
  bmp.Free;
end;
Die test.bmp ist immer nur 0 Byte groß, wobei jedoch numread die exakte Anzahl der zu lesenden Bytes ist. add.bmp ist innerhalb der Buffergröße, also das ist egal.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning.
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#2

Re: Stream als Rückgabewert einer Funktion

  Alt 2. Jun 2004, 00:23
mach doch aus der funktion ne prozedur und übergib ne variable dann dürfte das hinhauen also so

Delphi-Quellcode:
procedure TestStream(var aStream: TMemoryStream)
begin
  //blablabla
end;
mfg phlux
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Alibi

Registriert seit: 15. Aug 2003
Ort: Bispingen
94 Beiträge
 
Delphi 7 Personal
 
#3

Re: Stream als Rückgabewert einer Funktion

  Alt 2. Jun 2004, 00:49
Wäre ne Idee. Trotzdem interessiert es mich doch schon, warum der oben gepostete Code nicht funktioniert.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Stream als Rückgabewert einer Funktion

  Alt 2. Jun 2004, 00:54
Moin!

Dazu 2 Dinge:

1. Du übergibst den Rückgabewert (den Stream) direkt der LoadFromStream, somit wird dieser nicht freigeben -> Speicherleck.
2. Das Problem liegt darin, das WriteBuffer() die Daten in den Stream schreibt und danach ist der Positionszeiger des Streams am Ende des selbigen (Position = Size). Und LoadFromStream liest von der aktuellen Position im Stream ausgehen. Daher: Setze die Position des Zeigers auf 0 zurück nach dem WriteBuffer... (Position := 0 in der teststream vor'm End)

MfG
Muetze1
  Mit Zitat antworten Zitat
Alibi

Registriert seit: 15. Aug 2003
Ort: Bispingen
94 Beiträge
 
Delphi 7 Personal
 
#5

Re: Stream als Rückgabewert einer Funktion

  Alt 2. Jun 2004, 01:17
Ah, klar, k, Brett vor dem Kopf gehabt. Danke.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning.
  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: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