Naja, dein code gibt nicht viel her. Ich sehe nur, dass die Erstellung des Streams und das schreiben in 2 unterschiedlichen Objekten erfolgt (TForm1 und TMain), vllt ist TForm1 einfach nicht nicht initialisiert gewesen und der Stream deswegen nicht erstellt.
Der Fehler mit dem Lesen von Adresse 0000000 war in meinem ganzen Delphi Programmiererleben (bin seit Delphi 2 dabei) IMMER ein Zugriff auf ein nicht-erzeugtes Objekt/Speicherbereich.
Das mit dem Schreiben in den Stream bin ich mir nicht sicher, dass es so einfach geht, ohne es auszuprobieren. Ich habe das anders in meinem Code :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TTemplateStreamer.WriteString(S: String); var i : Integer; b : Byte; begin If SizeOf(Char) = 1 Then b := sdtString Else b := sdtWideString; FStream.Write(b, SizeOf(Byte)); i := Length(S); FStream.Write(i, SizeOf(Integer)); FStream.Write(Pointer(S)^, Length(S) * SizeOf(Char)); end; |
Du siehst, ich wandle den string in einen PChar und dereferenziere diesen, um den String zu schreiben.
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw