![]() |
Packed Records und Zeichenketten
Hi,
Ich werde/will/tue packed records übers Netzwerk/Internet verschicken. Der String (bzw. Allgemein: die Zeichenkette) soll in einem Record sein. "Normale" Strings kann ich ja nicht nehmen. Strings mit begrenzter Länge gehn leider auch nicht. Geht das irgendwie mit PChar oder einen Array of Char ? Ich steh grad bisschen auf der Leitung. Gruß Neutral General |
Re: Packed Records und Zeichenketten
Zitat:
|
Re: Packed Records und Zeichenketten
Weil: Eventuell lange Texte > 255 Zeichen :wink:
|
Re: Packed Records und Zeichenketten
Wenn du nur einen string hast, kannst du etwas gemeines tun:
Delphi-Quellcode:
Diesen Record darfst du *nur* über GetMem initialisieren. New oder Variablen des Recordtyps sind absolut verboten:
type
PMeanRecord = ^TMeanRecord; TMeanRecord = packed record Size: Integer; // deine Felder Text: array[1..MaxInt] of Char; //(eigentlich 1..Size) end; const TMeanRecordMinimumSize = 4; //+Größe deiner Felder
Delphi-Quellcode:
Wenn du mehrere Strings brauchst... Nun, Pech gehabt. Dann musst du dir Handler dafür schreiben.
var
rec: PMeanRecord; GetMem(rec, TMeanRecordMinimumSize + stringLength); |
Re: Packed Records und Zeichenketten
Moin Michael,
Zitat:
|
Re: Packed Records und Zeichenketten
Du kannst nehmen:
TextString: String[100]; Zitat:
|
Re: Packed Records und Zeichenketten
Hi Dax,
Brauche nur einen String :) Und wenn ich das so mache dann brauche ich auch wirklich nur Size(Record ohne String) + Length(String) Bytes? Ich kanns kaum fassen :) Ok das es mit New bzw Variablen vom Record selbst nicht geht ist mir jetzt auch klar, weeeiil sonst hätte ich Monsterrecords, die ich sicher verschicken will -.-^^ "145 Bytes runtergeladen von 5.32MB von 'Hallo Welt#0#0[...]#0'" :mrgreen: Gruß Neutral General |
Re: Packed Records und Zeichenketten
Das dürfte eher in Richtung 2^31+x Bytes gehen, nicht nur 5,32 MB ;)
|
Re: Packed Records und Zeichenketten
Achja... Kann den String nicht genau MaxInt Bytes groß machen...
Zitat:
Delphi-Quellcode:
x := SizeOf(Record-String);
Text: array[1..MaxInt-x] of Char; |
Re: Packed Records und Zeichenketten
Dann verwende eine sinnvolle Obergrenze wie (1 shl 29), das dürfte sicherlich reichen... Oder du schaltest das Range checking aus und benutzt gleich [0..0].
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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