Also dachte ich, ich vergleiche mal die Strukturgrößen zwischen einem C-Compiler und PB.
Folgendes steht in der af_irda.h:
Code: Alles auswählen
typedef struct _SOCKADDR_IRDA {
u_short irdaAddressFamily;
u_char irdaDeviceID[4];
char irdaServiceName[25];
} SOCKADDR_IRDA,*PSOCKADDR_IRDA,*LPSOCKADDR_IRDA;
typedef struct _WINDOWS_IRDA_DEVICE_INFO {
u_char irdaDeviceID[4];
char irdaDeviceName[22];
u_char irdaDeviceHints1;
u_char irdaDeviceHints2;
u_char irdaCharSet;
} WINDOWS_IRDA_DEVICE_INFO,*PWINDOWS_IRDA_DEVICE_INFO,*LPWINDOWS_IRDA_DEVICE_INFO;
typedef struct _WINDOWS_DEVICELIST {
ULONG numDevice;
WINDOWS_IRDA_DEVICE_INFO Device[1];
} WINDOWS_DEVICELIST,*PWINDOWS_DEVICELIST,*LPWINDOWS_DEVICELIST;
Code: Alles auswählen
Structure SOCKADDR_IRDA
irdaAddressFamily.w
irdaDeviceID.l
irdaServiceName.b[25]
EndStructure
Structure IRDA_DEVICE_INFO
irdaDeviceID.l
irdaDeviceName.b[22]
irdaDeviceHints1.b
irdaDeviceHints2.b
irdaCharSet.b
EndStructure
Structure DEVICELIST
numDevice.l
Device.IRDA_DEVICE_INFO[0] ;<- o.k. ist klar, dass die Größe hier nicht stimmt, aber ich brauche ein unbestimmt großes Array
EndStructure
SOCKADDR_IRDA ;<-C: 32, PB: 31!!
IRDA_DEVICE_INFO ;<-C: 29, PB: 29, o.k.
DEVICELIST ;<-C: 36, PB: 4!!, klar, hätte ich Device[1] deklariert wären es aber auch nur 4 + 29 Bytes und keine 36!
Wenn der C-Compiler irgendwie die Bytes alignen (gibt bestimmt ein deutsches Wort dafür, sorry fällt mir gerade nicht ein) würde, würden bei IRDA_DEVICE_INFO aber niemals 29 Bytes rauskommen.
Kann mir jemand erklären, wie es zu diesen Größenunterschieden kommt?
Der Unterschied, der ins Auge sticht, ist, dass die beiden Strukturen, die sich unterscheiden in der af_irda.h mit Präfix _WINDOWS deklariert wurden, was genau bedeutet das denn?