![]() |
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:
Das kann doch nicht wahr bzw. gewollt sein!
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; 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 |
AW: TMemoryStream Create Problem
Delphi-Quellcode:
ist nicht nil nach dem Create. Lediglich der enthaltene Memory-Pointer ist nil, aber das ist nicht nur so gewollt, sondern auch korrekt.
ms1
Wo genau liegt denn dein Problem? |
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? |
AW: TMemoryStream Create Problem
Ich habe ms1 im Überwachungsfenster, wird dort als Nil angezeigt.
Berlin 10.1 wenn das relevant ist. Ciao Stefan |
AW: TMemoryStream Create Problem
Zitat:
Delphi-Quellcode:
Ciao
ms1.Position :=0;
ms2.CopyFrom(ms1, ms1.Size); Stefan |
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. |
AW: TMemoryStream Create Problem
Zitat:
|
AW: TMemoryStream Create Problem
Hallo,
Zitat:
Zeig mal mehr Code. Minimal-Beispiel ohne WPTools klappt auch nicht? Bei welcher Zeile "knallt" es? ms1.Position :=0; ms2.CopyFrom(ms1, ms1.Size); |
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 |
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. |
AW: TMemoryStream Create Problem
Hallo,
nimm mal als Watchpoint ms1=nil Da müsste False stehen. |
AW: TMemoryStream Create Problem
Hallo noch mal,
hast Du eigentlich die WPTools-Version, die auch Docx kann? Wenn ja, klappt das auch richtig? |
AW: TMemoryStream Create Problem
Wenn ms1/ms2 wirklich
Delphi-Quellcode:
wären, dann würde da auch nur
nil
Delphi-Quellcode:
stehen.
nil
Dort steht aber
Delphi-Quellcode:
und das sind die Werte der Felder in dieser Instanz
(nil, 0, 0, 0)
|
AW: TMemoryStream Create Problem
Zitat:
Delphi-Quellcode:
Für einen leeren TMemorystream ist FMemory = nil, FSize = 0, FPosition = 0, FCapacity = 0.
TCustomMemoryStream = class(TStream)
private FMemory: Pointer; FSize, FPosition: NativeInt; TMemoryStream = class(TCustomMemoryStream) private FCapacity: NativeInt; Die beiden Objektreferenzen selbst sind nicht nil, sonst würde die Anzeige anders aussehen |
AW: TMemoryStream Create Problem
Zitat:
Ciao Stefan |
AW: TMemoryStream Create Problem
Zitat:
![]() gibt es einen Editor mit dem man das Laden und Speichern testen kann. Das DocX format ist eine ganz saubere und stabile Sache. Es werden im Allgemeinen die Textattribute unterstützt, die WPTools auch sonst kann. Nicht unterstützt werden Zeichenbefehle, wie Linien, Kreise etc, ausser den "Shapes" Bilder. Wenn es Fragen gibt, bitte fragen :-) support@wptoos.de Grüsse, Julian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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