Forum: Object-Pascal / Delphi-Language
Delphi
by marabu,
25. Mär 2008
Die diskutierten Probleme machen Records als Versandeinheit untauglich, zum Speichern der einzelnen Informationen in deinem Programm kannst du selbstverständlich Records benutzen.
Forum: Object-Pascal / Delphi-Language
Delphi
by marabu,
24. Mär 2008
Wenn du mehr als 255-stellige Strings versenden möchtest, dann würde ich nicht mit Records arbeiten. Du kannst sie einzeln oder auch mehrere auf einmal versenden:
function BufferAddString(var buffer: string; const s: string): Cardinal;
var
index, bytes: Cardinal;
begin
index := Succ(Length(buffer));
bytes := Length(s);
SetLength(buffer, 3 + index + bytes);
Forum: Object-Pascal / Delphi-Language
Delphi
by marabu,
24. Mär 2008
Offensichtlich hast du etwas anderes als meinen Vorschlag geprüft.
Eine feste Länge gibst du einem String durch die Angabe der maximalen Länge bei der Typvereinbarung: string bis string sind möglich.
Forum: Object-Pascal / Delphi-Language
Delphi
by marabu,
24. Mär 2008
Jetzt hast du aus dem ShortString einen AnsiString gemacht. Der Speicherplatz für dParam liegt dann aber außerhalb deines Records und dParam selbst ist intern zu einem Pointer auf diesen Speicher geworden. Damit wird dein Record als Versandeinheit unbrauchbar. Pointer eignen sich nicht für den Versand, da sie nur im aktuellen Adressraum eine Bedeutung haben.
Betrachte mal SizeOf(daten) nachdem...
Forum: Object-Pascal / Delphi-Language
Delphi
by marabu,
24. Mär 2008
Hi Jackie,
dir auch Frohe Ostern.
Dynamisch wäre dein Record dann, wenn du den benötigten Speicherplatz explizit zur Laufzeit anfordern würdest - tust du aber nicht.
Weiter enthält dein Record zwei ShortStrings, die du fix auf 11 und 2 Byte dimensioniert hast - jeweils das erste Byte enthält die tatsächlich benutzte Anzahl von Zeichen, die du mittels Length() abfragen und mittels...