Code : Tout sélectionner
typedef struct tagACCEL {
BYTE fVirt;
WORD key;
WORD cmd;
} ACCEL, *LPACCEL;
Code : Tout sélectionner
Structure ACCEL
fVirt.w
key.w
cmd.w
EndStructure
Code : Tout sélectionner
typedef struct tagACCEL {
BYTE fVirt;
WORD key;
WORD cmd;
} ACCEL, *LPACCEL;
Code : Tout sélectionner
Structure ACCEL
fVirt.w
key.w
cmd.w
EndStructure
Si je comprend bien, toutes les structures PB ayant une taille impaires sont fausses (je n'ai pas testé)Fred a écrit :Corrigé. A noter qu'il faut ajouter un 'pad.b' apres le fvirt.b sinon l'alignement de la structure n'est pas respectée.
Code : Tout sélectionner
residents PB
Structure BYTE Taille :1
Fichier résident : PureBasic_x86.res
Structure RGBTRIPLE Taille :3
Fichier résident : Windows.res
Structure TEXTMETRIC Taille :53
Fichier résident : Windows.res
Structure NEWTEXTMETRIC Taille :69
Fichier résident : Windows.res
Structure RGNDATA Taille :33
Fichier résident : Windows.res
Structure ENUMLOGFONTEX Taille :7
Fichier résident : Windows.res
Structure MENUITEMTEMPLATE Taille :5
Fichier résident : Windows.res
Structure DDEDATA Taille :13
Fichier résident : Windows.res
Structure DDEPOKE Taille :9
Fichier résident : Windows.res
Structure DDEUP Taille :13
Fichier résident : Windows.res
Structure MONHSZSTRUCT Taille :21
Fichier résident : Windows.res
Structure SMPTE Taille :7
Fichier résident : Windows.res
Structure NCB Taille :63
Fichier résident : Windows.res
Structure MODEMDEVCAPS Taille :77
Fichier résident : Windows.res
Structure MODEMSETTINGS Taille :45
Fichier résident : Windows.res
Structure ICMP_HDR Taille :9
Fichier résident : Windows.res
Structure DEV_BROADCAST_PORT Taille :13
Fichier résident : Windows.res
Structure NMCBEENDEDIT Taille :25
Fichier résident : Windows.res
Structure NMDATETIMEFORMAT Taille :37
Fichier résident : Windows.res
residents lib utilisateurs:
Structure FSOUND_TOC_TAG Taille :1195
Fichier résident : FMOD374_CONSTS_STRUCTS.res
Structure REGEXP Taille :15
Fichier résident : PBRegExpEx.res
Code : Tout sélectionner
Lib PB :
Structure DCB Taille :28
Fichier résident : Windows.res
Structure ACL Taille :8
Fichier résident : Windows.res
Structure ACE_HEADER Taille :4
Fichier résident : Windows.res
Structure SECURITY_DESCRIPTOR Taille :22
Fichier résident : Windows.res
Structure LDT_BYTES Taille :4
Fichier résident : Windows.res
Structure CPINFO Taille :6
Fichier résident : Windows.res
Structure RGBQUAD Taille :4
Fichier résident : Windows.res
Structure PALETTEENTRY Taille :4
Fichier résident : Windows.res
Structure LOGFONT Taille :60
Fichier résident : Windows.res
Structure PANOSE Taille :10
Fichier résident : Windows.res
Structure OUTLINETEXTMETRIC Taille :208
Fichier résident : Windows.res
Structure MENUITEMTEMPLATE Taille :5
Fichier résident : Windows.res
Structure MULTIKEYHELP Taille :258
Fichier résident : Windows.res
Structure CRGB Taille :4
Fichier résident : Windows.res
Structure SYSTEM_POWER_STATUS Taille :12
Fichier résident : Windows.res
Structure PIXELFORMATDESCRIPTOR Taille :40
Fichier résident : Windows.res
Structure IMAGE_OPTIONAL_HEADER Taille :224
Fichier résident : Windows.res
Structure TBBUTTON Taille :20
Fichier résident : Windows.res
Structure TBBUTTONINFOA Taille :32
Fichier résident : Windows.res
Structure TBBUTTONINFOW Taille :32
Fichier résident : Windows.res
Structure CHARFORMAT Taille :60
Fichier résident : Windows.res
Structure ICMP_HDR Taille :9
Fichier résident : Windows.res
Structure IP_HDR Taille :20
Fichier résident : Windows.res
Structure ICMP_OPTIONS Taille :8
Fichier résident : Windows.res
Lib utilisateurs :
Structure VARIANT Taille :16
Fichier résident : Variant_inc.res
Structure SIGNSCALE Taille :2
Fichier résident : Variant_inc.res
Pour les structures avec une taille paire, le C ajoute un octet de padding après chaque élément de type byte ? (je suppose que oui sinon on est plus aligné en adresse)Fred a écrit :En effet, toute structure API impaire est par definition suspecte. Je vais regarder les structures que tu as mise en relief et voir si y'a une erreur. Pour les autres structures (PB, lib utilisateur) ca n'a pas d'importance car PB n'en tient pas compte.
Code : Tout sélectionner
struct
{
char letter;
int test;
};
Code : Tout sélectionner
Structure
letter.b
pad.b[3]
test.l
EndStructure
Fred, Je me pose encore des questions sur ce problème. Tu dis que le padding dépend de la directive de compilation et c'est là que je ne comprend plusFred a écrit :En fait ca depend de la directive de compilation (#pragma pack). Apparement c'est pas sur un word mais sur un int que ca pad. Dans la structure NEWTEXTMETRIC j'avais une difference de 3 octets. Donc:
en C:
sera en PB:Code : Tout sélectionner
struct { char letter; int test; };
Code : Tout sélectionner
Structure letter.b pad.b[3] test.l EndStructure