Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TMemoryStream Create Problem (https://www.delphipraxis.net/199728-tmemorystream-create-problem.html)

skoschke 15. Feb 2019 08:38

TMemoryStream Create Problem
 
Hallo,

in einer eigenen Komponente habe ich TMemorystreams, diese werden im Create erzeugt und im Destroy wieder zerstört.

Nun ist mir aufgefallen, dass die Streams Nil sind, wenn man sie vorher nicht mit irgendwas gefüllt hat!
Das aber führt später zu Laufzeitfehlern (Stream Lesefehler) wenn man auf solch einen Stream zugreifen will.

Folgendes Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ms1 := TMemorystream.Create;
  //ms1 ist jetzt immer noch Nil
  ms1.SetSize(1);
  //jetzt ist der Stream da
  ms1.clear;
  //und jetzt wieder Nil!!!
end;
Das kann doch nicht wahr bzw. gewollt sein!
Eine TStringlist ist nach Erzeugung doch auch nicht Nil oder wird beim Clear zu Nil!

Wie bekomme ich nun Streams die auch leer "vorhanden sind"?


Ciao
Stefan

Uwe Raabe 15. Feb 2019 08:59

AW: TMemoryStream Create Problem
 
Delphi-Quellcode:
ms1
ist nicht nil nach dem Create. Lediglich der enthaltene Memory-Pointer ist nil, aber das ist nicht nur so gewollt, sondern auch korrekt.

Wo genau liegt denn dein Problem?

hoika 15. Feb 2019 09:16

AW: TMemoryStream Create Problem
 
Hallo,
ich habe deinen Code mal ausprobiert (mit ms1 als lokale Variable).

Auch eingeschaltener Optimierung ist ms1 nicht nil.
Woher weisst du das?

skoschke 15. Feb 2019 10:02

AW: TMemoryStream Create Problem
 
Ich habe ms1 im Überwachungsfenster, wird dort als Nil angezeigt.

Berlin 10.1 wenn das relevant ist.

Ciao
Stefan

skoschke 15. Feb 2019 10:06

AW: TMemoryStream Create Problem
 
Zitat:

Wo genau liegt denn dein Problem?
es knallt wenn ich versuche solch einen leeren Stream in einen anderen (hier Übergabe an WPTools) zu kopieren

Delphi-Quellcode:
  ms1.Position :=0;
  ms2.CopyFrom(ms1, ms1.Size);
Ciao
Stefan

Jasocul 15. Feb 2019 10:14

AW: TMemoryStream Create Problem
 
Bei mir ist Tokyo im Einsatz.

Es ist, wie Uwe schon geschrieben hat.

Dein Beispiel knallt bei mir übrigens nicht.
Ich fürchte, du suchst den Fehler an der falschen Stelle.

DasWolf 15. Feb 2019 10:16

AW: TMemoryStream Create Problem
 
Zitat:

Zitat von Jasocul (Beitrag 1425614)
Bei mir ist Tokyo im Einsatz.

Es ist, wie Uwe schon geschrieben hat.

Dein Beispiel knallt bei mir übrigens nicht.
Ich fürchte, du suchst den Fehler an der falschen Stelle.

Ich habe es auch nachgestellt und es läuft problemlos mit Version 10.1 Berlin.

hoika 15. Feb 2019 10:39

AW: TMemoryStream Create Problem
 
Hallo,
Zitat:

es knallt wenn ich versuche solch einen leeren Stream in einen anderen (hier Übergabe an WPTools) zu kopieren
Ist denn ms2 erzeugt?

Zeig mal mehr Code.

Minimal-Beispiel ohne WPTools klappt auch nicht?


Bei welcher Zeile "knallt" es?
ms1.Position :=0;
ms2.CopyFrom(ms1, ms1.Size);

skoschke 15. Feb 2019 11:44

AW: TMemoryStream Create Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Der Stream-Lesefehler beim Kopieren war ein Positionierungsfehler meinerseits, ändert aber nichts daran dass ein erzeugter Stream im Objektinspektor als Nil angezeigt wird (siehe Anhang)

Ciao
Stefan

Jasocul 15. Feb 2019 11:52

AW: TMemoryStream Create Problem
 
Nein, der Stream ist nicht nil.
Genauer gesagt, weder ms1 noch ms2 sind nil, sondern die zugehörigen Memory-Pointer. Das ist was anderes. Uwe Raabe hatte das auch schon geschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr.
Seite 1 von 2  1 2      

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