A partir du code de Danilo pour lires les structures des résidents, j'ai modifié pour lire toutes les structures en 32/ 64 bit en Ascii/Unicode.
Il y a 683 structures déclarées par PB (5.41 LTS beta 2).
Je n'ai pas trouvé de commande pour lire les tailles des structures, alors j'ai écrit du code pour cela et j'ai comparé mes résultats avec les valeurs de PB (commande sizeof()) afin de voir si j'avais fait des erreurs.
La seule différence est sur la taille de la structure MONITORINFOEX dans les 4 modes, PB retourne toujours 72 alors que l'on devrait avoir 44 ou 48.
Les tailles des structures des résidents sont définies un fois pour toute et non calculées, il y a donc une erreur sur la taille de cette structure, pas sur la déclaration qui est Ok.
Erreur sur la taille de la structure MONITORINFOEX
Re: Erreur sur la taille de la structure MONITORINFOEX
En version 5.40 LTS 3, donc plus ancienne que la tienne, la fonction fonctionne.
Et on doit avoir un size de 40 pour MONITORINFO ou 72 pour MONITORINFOEX en mode ASCII, soit 40+32=72, voir ci-dessous:
Et on doit avoir un size de 40 pour MONITORINFO ou 72 pour MONITORINFOEX en mode ASCII, soit 40+32=72, voir ci-dessous:
Code : Tout sélectionner
typedef struct tagMONITORINFOEX {
DWORD cbSize;
RECT rcMonitor;
RECT rcWork;
DWORD dwFlags;
TCHAR szDevice[CCHDEVICENAME]; ici CCHDEVICENAME vaut 32 en ascii
} MONITORINFOEX, *LPMONITORINFOEX;
Re: Erreur sur la taille de la structure MONITORINFOEX
Ok Nico et merci,
je vais installer la dernière beta et tester
je vais installer la dernière beta et tester
Re: Erreur sur la taille de la structure MONITORINFOEX
J'ai installé la dernière beta.
La structure MONITORINFOEX est déclaée comme ceci en PB (windows) que cela soit en 32 ou 64 bit en ascii ou unicode
avec cette structure, la taille ne pourra jamais atteindre 72 octets.
szDevice est déclarée comme une chaine et devrait occuper 4/8 octets selon la plateforme.
La déclaration de MS (merci Nico) défini szDevice comme un tableau de caractères, un caractère tenant 1 octet en asci et 2 octets en unicode.
J'ai défini une struture MONITORINFOEX_1 conforme à MONITORINFOEX de MS et j'ai utilisé sizeof() en 32/64 bit, Ascii/unicode, avec et sans alignement.
L'alignement ne change pas la taille pour cette structure.
voici les tailles de la structure MONITORINFOEX_1
La structure MONITORINFOEX est déclaée comme ceci en PB (windows) que cela soit en 32 ou 64 bit en ascii ou unicode
Code : Tout sélectionner
Structure MONITORINFOEX
cbSize.l
rcMonitor.RECT
rcWork.RECT
dwFlags.l
szDevice.s
EndStructure
szDevice est déclarée comme une chaine et devrait occuper 4/8 octets selon la plateforme.
La déclaration de MS (merci Nico) défini szDevice comme un tableau de caractères, un caractère tenant 1 octet en asci et 2 octets en unicode.
J'ai défini une struture MONITORINFOEX_1 conforme à MONITORINFOEX de MS et j'ai utilisé sizeof() en 32/64 bit, Ascii/unicode, avec et sans alignement.
L'alignement ne change pas la taille pour cette structure.
Code : Tout sélectionner
Structure MONITORINFOEX_1
cbSize.l
rcMonitor.RECT
rcWork.RECT
dwFlags.l
szDevice.c[#CCHDEVICENAME]
EndStructure
La taille de la structure MONITORINFOEX est toujours de 72 octets (32/64 Ascii/Unicode) et est fausse en unicode et sa déclaration l'est également au regard de la taille retournée ainsi que vis-à-vis de la déclaration MS.; x86 Ascii MONITORINFOEX_1 sans alignement
Taille 72
; x86 Ascii MONITORINFOEX_1 avec Align #PB_Structure_AlignC
Taille 72
; x86 Unicode MONITORINFOEX_1 sans alignement
Taille 104
; x86 Unicode MONITORINFOEX_1 avec Align #PB_Structure_AlignC
Taille 104
; x64 Ascii MONITORINFOEX_1 sans alignement
Taille 72
; x64 Ascii MONITORINFOEX_1 avec Align #PB_Structure_AlignC
Taille 72
; x64 Unicode MONITORINFOEX_1 sans alignement
Taille 104
; x64 Unicode MONITORINFOEX_1 avec Align #PB_Structure_AlignC
Taille 104
Re: Erreur sur la taille de la structure MONITORINFOEX
En fait, la structure etait declarée comme ceci:
Mais elle n'etait pas mis dans le fichier unicode, donc une seule version etait dispo (et elle devait avoir la bonne taille). Je l'ai changé pour etre plus coherent avec les autres structures:
Merci !
Code : Tout sélectionner
Structure MONITORINFOEX
cbSize.l
rcMonitor.RECT
rcWork.RECT
dwFlags.l
szDevice.s{#CCHDEVICENAME}
EndStructure
Code : Tout sélectionner
Structure MONITORINFOEX
cbSize.l
rcMonitor.RECT
rcWork.RECT
dwFlags.l
szDevice.c[#CCHDEVICENAME]
EndStructure
Re: Erreur sur la taille de la structure MONITORINFOEX
Trop fort ce Fred
La correction est Ok avec la beta 4
La correction est Ok avec la beta 4