AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TMemoryStream fehler

Ein Thema von XXcD · begonnen am 23. Jun 2009 · letzter Beitrag vom 24. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

TMemoryStream fehler

  Alt 23. Jun 2009, 20:49
Hallo,
ich habe jetzt von Delphi 2006 auf Delphi 2009 geupdatet.
Nun ist mir folgender Fehler aufgefallen.

Ich habe folgenden Code:
Delphi-Quellcode:
type
  TStreamHelper = class helper for TStream
  public
    procedure WriteString (const s: string);
  end;

procedure TStreamHelper.WriteString (const s: string);
var
  len : Integer;
begin
  len := Length(s);
  WriteBuffer(len, SizeOf(len));
  if (len > 0) then
    WriteBuffer(s[1], len);
end;
...
 statestream:= TMemoryStream.Create;
 statestream.WriteString(Memo1.Lines.Text);
 AResponseInfo.ContentStream := statestream;
Damit soll aus Memo1 der Quelltext für die Website geladen werden.

In Memo1 ist noch alles in Ordnung der Quelltext ist einwandfrei.
Im Browser sieht das dann nicht mehr so gut aus, da kommt nur noch mist raus.

Merkwürdigerweise wenn ich eine Datei per TFilestream lade und anzeige ist alles in Ordnung.

Wo kann denn da der Fehler liegen?


Auch das aussehen des Quelltextes ist komisch.

In Memo1:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>INDEX</title>
<style type="text/css">
<!--
body {
   margin-left: 0px;
   margin-top: 2px;
   margin-right: 0px;
   margin-bottom: 2px;
   background-color: #000000;
}
body,td,th {
   color: #CCCCCC;
   font-family: Arial, Helvetica, sans-serif;
}
a:link {
   color: #CCCCCC;
   text-decoration: none;
}
a:visited {
   color: #CCCCCC;
   text-decoration: none;
}
a:hover {
   color: #CCCCCC;
   text-decoration: underline;
}
a:active {
   color: #CCCCCC;
   text-decoration: none;
}
-->
</style>
</head>
<body oncontextmenu="return false">
  <script language="javascript" type="text/javascript">
<!--
function reload()

location.reload();

//-->
</SCRIPT>

<div style="float: left;">[b][url="javascript:reload()"]Refresh[/url][/b]</div>
<div style="float: right;">[b][url="./action?logout"]Logout[/url][/b]</div>
<div align="center">
[b]<u>Status</u>|[url="settings.html"]Einstellungen[/url][/b]</div>
<hr />






</body>
</html>
Im Browser:
Code:
Š  < ! D O C T Y P E  h t m l  P U B L I C  " - / / W 3 C / / D T D  X H T M L  1 . 0   T r a n s i t i o n a l / / E N "  " h t t p : / / w w w . w 3 . o r g / T R / x h t m l 1 / D T D / x h t m l 1 - t r a n s i t i o n a l . d t d " >
 
 < h t m l  x m l n s = " h t t p : / / w w w . w 3 . o r g / 1 9 9 9 / x h t m l " >
 
 < h e a d >
 
 < m e t a  h t t p - e q u i v = " C o n t e n t - T y p e "  c o n t e n t = " t e x t / h t m l ;  c h a r s e t = i s o - 8 8 5 9 - 1 "  / >
 
 < t i t l e > I N D E X < / t i t l e >
 
 < s t y l e  t y p e = " t e x t / c s s " >
 
 < ! - - 
 
 b o d y  { 
 
     m a r g i n - l e f t :  0 p x ;
 
     m a r g i n - t o p :  2 p x ;
 
     m a r g i n - r i g h t :  0 p x ;
 
     m a r g i n - b o t t o m :  2 p x ;
 
     b a c k g r o u n d - c o l o r :  # 0 0 0 0 0 0 ;
 
 } 
 
 b o d y , t d , t h  { 
 
     c o l o r :  # C C C C C C ;
 
     f o n t - f a m i l y :  A r i a l ,  H e l v e t i c a ,  s a n s - s e r i f ;
 
 } 
 
 a : l i n k  { 
 
     c o l o r :  # C C C C C C ;
 
     t e x t - d e c o r a t i o n :  n o n e ;
 
 } 
 
 a : v i s i t e d  { 
 
     c o l o r :  # C C C C C C ;
 
     t e x t - d e c o r a t i o n :  n o n e ;
 
 } 
 
 a : h o v e r  { 
 
     c o l o r :  # C C C C C C ;
 
     t e x t - d e c o r a t i o n :  u n d e r l i n e ;
 
 } 
 
 a : a c t i v e  { 
 
     c o l o r :  # C C C C
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: TMemoryStream fehler

  Alt 23. Jun 2009, 20:57
Ein String (D2) ist ein String (D2007) ist keinString(D2009): Stichwort 'WideString'
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: TMemoryStream fehler

  Alt 23. Jun 2009, 21:13
ersetze einfach überall string durch AnsiString und es läuft wieder (allerdings dann natürlich nicht als Unicode)

PS: D2009 String = UnicodeString und nicht WideString

Wenn es Unicode werden soll dann entweder alles auf UnicodeString ändern oder WideString, wenn der Code weiterhin kompatibel zu älteren Delphi-Versionen bleiben soll
und natürlich
WriteBuffer(s[1], len * 2); // + WideString oder UnicodeString oder es als string belassen und dann
WriteBuffer(s[1], len * SizeOf(Char)); bei WideString ist der Format im Stream dann immer in Unicode,
bei AnsiString dann immer ANSI

und bei String abhängig vom Compiler


PSS: ist auh ganz frisch und akuell in Zeile 3 zu finden
Forum: Tutorials und Kurse > Strings lesen und speichern (via Stream und Co.)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TMemoryStream fehler

  Alt 23. Jun 2009, 21:55
Zitat von XXcD:
Hallo,
ich habe jetzt von Delphi 2006 auf Delphi 2009 geupdatet.
Nun ist mir folgender Fehler aufgefallen.

Ich habe folgenden Code:
Delphi-Quellcode:
type
  TStreamHelper = class helper for TStream
  public
    procedure WriteString (const s: string);
  end;
Was ist das für eine Syntax?
Kann mich bitte einer Aufklären.

Was geschieht hier genau:
TStreamHelper = class helper for TStream MfG und danke im voraus
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: TMemoryStream fehler

  Alt 23. Jun 2009, 22:00
Zitat von himitsu:
PS: D2009 String = UnicodeString und nicht WideString
Argumentativ kein (8bit vs. 16bit) aber en detail ein gewaltiger Unterschied! Danke für die Korrektur.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TMemoryStream fehler

  Alt 23. Jun 2009, 22:03
@Aphton: Ein Delphi-Feature ab Delphi 2006: Class helpers. Diese Deklaration ermöglicht, bei einem beliebigen Stream str.WriteString('Wuppdi') zu schreiben, ohne dass dafür die Deklaration von TStream angepasst werden müsste.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TMemoryStream fehler

  Alt 23. Jun 2009, 22:08
Und es könne so auch sealed classes "erweitert" werden
Markus Kinzler
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: TMemoryStream fehler

  Alt 23. Jun 2009, 22:25
Zitat von mkinzler:
Und es könne so auch sealed classes "erweitert" werden
Gibts diese überhaupt in Delphi? Klassen die nicht mehr erweitert werden können habe ich in Delphi noch nie gesehen. Kenne das nur aus C# und Java.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#9

Re: TMemoryStream fehler

  Alt 23. Jun 2009, 22:32
Seit 2006 (?) gibt es ein Schlüsselwort "sealed".

Ob es funktioniert, ist die andere Sache
Tut es
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: TMemoryStream fehler

  Alt 23. Jun 2009, 22:37
Delphi 2006 TDE kennt das Schlüsselwort sealed. Oh weh, das ist mir bisher total entgangen. Aber so spezielle Typen habe ich bisher nicht gebraucht, das ich diese mit sealed versehen musste.
Tut mir leid für OT.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:09 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