Einzelnen Beitrag anzeigen

Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#16

Re: Winsock , send/recv, wie?

  Alt 19. Apr 2007, 23:21
Dein Problem liegt an SizeOf(): Ein Integer ist ein primitiver Datentyp, d.h. er stellt keine Referenz auf ein anderes Objekt dar. Er belegt auf einer 32-bit Architektur 4 Byte. Ein String ist jedoch kein solch ein primitiver Datentyp. Du kannst einen String eher als eine class ansehen, die auf eine Zeichenkette zeigt, d.h. auf ein array of char (in Java ist ein String sogar genau so definiert). Eine Referenz ist also ein Pointer, d.h. auf einer 32-bit Architektur belegt er ebenfalls 4 Byte. SizeOf() bestimmt also nur die Größe des direkten Typs, nicht aber das Objekt, was hinter einer Referenz "verborgen" ist.
Du kannst dies wunderbar an einem Beispiel testen:
Delphi-Quellcode:
type
  TData = record
    int : Integer;
    s : String;
  end;
[...]
var
  d: TData;
begin
  d.s := 'ebhfgoaehfab'; // Größe des Strings wirkt sich nicht auf die Größe des records aus
  ShowMsg(SizeOf(d)); // z.B. MessageBox() o.Ä.
end;
Egal wie viele Zeichen Du dem String zuweist, es wird immer 8 Byte ausgegeben.
Mein Vorschlag:
Du musst die Länge aller nicht-primitiven Typen selbst zu der Größe des records addieren.

Jute Nacht, Nogge
  Mit Zitat antworten Zitat