![]() |
Strings senden
Hi!
Also ich möchte einen Record übers Netzwerk schicken. Der sieht in der 1.Version so aus:
Delphi-Quellcode:
aber ich will mehr als 255 Zeichen schicken!
Type TMessageRec = Record
Code : shortstring; Nickname : shortstring; CName : shortstring; Mail : shortstring; end;
Delphi-Quellcode:
Ich mach da mit WriteBuffer
Type TMessageRec = Record
Code : string; Nickname : string; CName : string; Mail : string; end;
Delphi-Quellcode:
Nun kommt es zu einem Laufzeitfehler!!!
var
Rec:TMessageRec; ... try try Client.Connect(TimeO); Client.WriteBuffer(Rec,SizeOf(Rec)); finally Client.Disconnect; Client.Free; end; except Error := true; end; ... Die Indy-Komponente erzeugt den. (Also der Fehler kommt nicht immer, aber im Debug-Modus immer so wenns bei einem Memo was einfügt. Der Cursor springt dann aber in den Quelltext der Indy-Kompo) ![]() Da steht das man keine Strings senden kann. Kann man das irgentwie umgehen? Ich würde gerne mehr als 255 Zeichen senden! :wink: Hoffentlich könnt ihr mir helfen! Wäre echt nett :-) |
Re: Strings senden
Guck dir mal mein Protokoll an ... zu finden in der CodeLib ...
![]() |
Re: Strings senden
Hi,
du erhältst einen Fehler, wenn du etwas in ein Memo einfügen willst, aber den Code dazu hast du gar nicht gezeigt. Mit den langen Strings ist das so eine Sache. Woher soll der Empfänger wissen, wielange dieser String ist? Beim ShortString sind das 256 Byte, ein Byte Längeninformation und 255 Byte für den Zeichen-Puffer. Bei langen Strings musst du die Länge zuerst als Integer schicken, damit der Empfänger einen Puffer anlegen kann und danach die Zeichen des Strings. Dann hat der Empfänger eine Chance - wenn er weiß, dass zuerst die Längeninformation kommt. Die String-Variable ist bei langen Strings intern nichts anderes als ein Zeiger auf den Puffer. Freundliche Grüße |
Re: Strings senden
Erstmal Danke für eure Hilfe. :-D
Ich hab den Code nicht gezeigt, da ich dachte wenn der Cursor zur Indy-Kompo springt liegt der Fehler nicht an mir. Ich wollte das Problem nur so genau wie möglich beschreiben. Das mit dem Zeiger habe ich mir schon gedacht. Wie groß ist denn aber nun 1 Zeichen in einem String? 1 Byte oder 2 Byte? Ich glaube da gibt es Zeichentypen mit 2 Byte pro Zeichen. :?: |
Re: Strings senden
Hi,
Zitat:
Freundliche Grüße |
Re: Strings senden
Danke!
Jetzt weiß ich wie ichs machen muss. :dancer: |
Re: Strings senden
Hi!
Ich bins nochmal. Ich glaube was wir besprochen habe ist total quatsch. Denn ich hab mal einen langen String als Test in einen MemoryStream geschrieben. Das geht nur mit SizeOf. Außerdem nochmal mein Prog durch getestet: Der Fehler kommt ja nicht immer. Und wenn keiner kommt kommen auch mehr als 255 Zeichen an. Ich glaube die Zugriffsverletzung komm wo anders her. Und da ich nur "Bei Exception anhalten" aktiviert hat, hats mit der nächsten Anweisung weitergemacht, also im Thread von Indy. Sorry :-( Naja, trotzdem nochmal vielen Danke. :cheers: halinchen P.S. Kann man das Thema hier löschen? Ist ja eigentlich sinnlos das stehen zu lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 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