Page 1 sur 1

Erreur sur la taille de la structure MONITORINFOEX

Publié : mer. 16/déc./2015 16:44
par Anonyme2
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.

Re: Erreur sur la taille de la structure MONITORINFOEX

Publié : mer. 16/déc./2015 18:48
par nico
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:

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

Publié : jeu. 17/déc./2015 5:54
par Anonyme2
Ok Nico et merci,

je vais installer la dernière beta et tester

Re: Erreur sur la taille de la structure MONITORINFOEX

Publié : jeu. 17/déc./2015 7:16
par Anonyme2
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

Code : Tout sélectionner

Structure MONITORINFOEX
  cbSize.l
  rcMonitor.RECT
  rcWork.RECT
  dwFlags.l
  szDevice.s
EndStructure
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.

Code : Tout sélectionner

Structure MONITORINFOEX_1
      cbSize.l
      rcMonitor.RECT
      rcWork.RECT
      dwFlags.l
      szDevice.c[#CCHDEVICENAME]
EndStructure
voici les tailles de la structure MONITORINFOEX_1
; 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
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.

Re: Erreur sur la taille de la structure MONITORINFOEX

Publié : jeu. 17/déc./2015 9:53
par Fred
En fait, la structure etait declarée comme ceci:

Code : Tout sélectionner

Structure MONITORINFOEX
  cbSize.l
  rcMonitor.RECT
  rcWork.RECT
  dwFlags.l
  szDevice.s{#CCHDEVICENAME}
EndStructure
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:

Code : Tout sélectionner

Structure MONITORINFOEX
 cbSize.l
 rcMonitor.RECT
 rcWork.RECT
 dwFlags.l
 szDevice.c[#CCHDEVICENAME]
EndStructure
Merci !

Re: Erreur sur la taille de la structure MONITORINFOEX

Publié : jeu. 17/déc./2015 16:46
par Anonyme2
Trop fort ce Fred :mrgreen:

La correction est Ok avec la beta 4 :D