AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TMemoryStream Create Problem

Ein Thema von skoschke · begonnen am 15. Feb 2019 · letzter Beitrag vom 2. Mär 2019
Antwort Antwort
Seite 1 von 2  1 2   
skoschke

Registriert seit: 6. Jan 2009
522 Beiträge
 
Delphi 10.4 Sydney
 
#1

TMemoryStream Create Problem

  Alt 15. Feb 2019, 09:38
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#2

AW: TMemoryStream Create Problem

  Alt 15. Feb 2019, 09:59
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TMemoryStream Create Problem

  Alt 15. Feb 2019, 10:16
Hallo,
ich habe deinen Code mal ausprobiert (mit ms1 als lokale Variable).

Auch eingeschaltener Optimierung ist ms1 nicht nil.
Woher weisst du das?
Heiko
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
522 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TMemoryStream Create Problem

  Alt 15. Feb 2019, 11:02
Ich habe ms1 im Überwachungsfenster, wird dort als Nil angezeigt.

Berlin 10.1 wenn das relevant ist.

Ciao
Stefan
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
522 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TMemoryStream Create Problem

  Alt 15. Feb 2019, 11:06
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
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.330 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TMemoryStream Create Problem

  Alt 15. Feb 2019, 11:14
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.
Peter
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
75 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: TMemoryStream Create Problem

  Alt 15. Feb 2019, 11:16
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TMemoryStream Create Problem

  Alt 15. Feb 2019, 11:39
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);
Heiko
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
522 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: TMemoryStream Create Problem

  Alt 15. Feb 2019, 12:44
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
Miniaturansicht angehängter Grafiken
neue-bitmap-2-.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.330 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TMemoryStream Create Problem

  Alt 15. Feb 2019, 12:52
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.
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:24 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