![]() |
Stream als Rückgabewert einer Funktion
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:
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.
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; |
Re: Stream als Rückgabewert einer Funktion
mach doch aus der funktion ne prozedur und übergib ne variable dann dürfte das hinhauen ;) also so
Delphi-Quellcode:
mfg phlux
procedure TestStream(var aStream: TMemoryStream)
begin //blablabla end; |
Re: Stream als Rückgabewert einer Funktion
Wäre ne Idee. :) Trotzdem interessiert es mich doch schon, warum der oben gepostete Code nicht funktioniert.
|
Re: Stream als Rückgabewert einer Funktion
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 |
Re: Stream als Rückgabewert einer Funktion
Ah, klar, k, Brett vor dem Kopf gehabt. :) Danke.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz