Einzelnen Beitrag anzeigen

Piberg

Registriert seit: 6. Jun 2006
6 Beiträge
 
Delphi 2006 Architect
 
#1

struct als TBytes nach record?

  Alt 30. Okt 2007, 17:16
Hallo Forum!

Nachdem ich einige Threads durchgeschaut habe, konnte ich diesen C++struct

Code:
typedef struct {
  short enable ;
  short side ;
  short angle ;
  short x ;
  short y ;
} pos_t ;

typedef struct {
  char name[16] ;
  short masse;
} obj_t ;

/* und endlich */
typedef struct {
  char pmode ;   /* nimmt Werte eines enum auf z.B. (pm_null, pm_1, pm_2) */
  obj_t figure[2] ;
  pos_t pos[3] ;
  short time ;
} info_t ;
in folgende Delphi-Typen überführen: (Hoffentlich ist es richtig. Bin für jede Bemerkung dankbar.)

Delphi-Quellcode:
type pos_t = packed record
  enable,
  side,
  angle,
  x, y : Smallint ;
end;

type obj_t = packed record
  name : string[16] ; // oder : array [0..15] of char ???
  masse: Smallint ;
end;

// und endlich
type info_t = packed record
  pmode : (pm_null, pm_1, pm_2) ;
  figure: array [0..1] of obj_t ;
  pos : array [0..2] of pos_t ;
  time : Smallint ;
end;


Jetzt zum eigentlichen Problem. Und zwar konnecte ich von Delphi aus zu einem Linux-Programm, das mir
das o.g. struct info_t über UDP sendet.
Dieses kann ich dann mit dem UDPRead-Ereignis von Indys idUDPServer empfangen. Die Daten sind dann im
Parameter AData vom Typ TBytes gespeichert.
Ach ja, ich muss noch erwähnen, dass es unterschiedliche structs verschickt werden. Das da Oben, war nur
ein kurzes Beispiel. Was sie nur gemeinsam haben ist pmode, anhand dessen ich unterscheiden kann,
was das nun fürn struct-Typ angekommen ist.

Und nun meine Frage:
Wie kann ich die empfangenen Bytes von AData nach mein record speichern? Ich muss ja auch zuerst
an pmode ran, um feststellen zu können, ob ich in mein info_t record oder ein anders
nehme.

Und bei der Gelegenheit noch ne Frage zur Typenwandlung:
Muss in diesem Fall wirklich ein packed record sein?


Danke im Voraus
  Mit Zitat antworten Zitat