1 pièce(s) jointe(s)
API et alignement de structures
Bonjour,
Voici un petit programme qui aide à corriger l'alignement de structures pour des appels à des DLL natives.
Après avoir converti une structure C en structure WD dans WDAPI, par exemple, vous pouvez coller le code dans cet outil pour compléter si nécessaire.
Notez que WDAPI est buggé et traite un ULONG_PTR comme un DWORD par exemple, donc ça reste délicat.
Je fournis les sources en WD24.
Ça fonctionnera dans le mode que vous lui donnerez : 32 ou 64 bits (pour les entiers systèmes), chaînes ANSI ou Unicode pour les chaînes sur lesquelles ce n'est pas précisé.
Là, le projet est en 64 bits Unicode, je crois.
Voici quelques exemples, tout à fait au hasard :
Code:
1 2 3 4 5
| COPYDATASTRUCT est une structure
dwData est un entier système //Type C : ULONG_PTR
cbData est un entier sans signe //Type C : DWORD
lpData est un entier système //Type C : PVOID
FIN |
Devient :
Code:
1 2 3 4 5 6
| COPYDATASTRUCT est une structure
dwData est un entier système //Type C : ULONG_PTR
cbData est un entier sans signe //Type C : DWORD
__pad_0__ est entier sur 4
lpData est un entier système //Type C : PVOID
FIN |
Puis :
Code:
1 2 3 4 5 6 7 8 9 10 11
| COPYDATASTRUCT est une structure
dwData est un entier système //Type C : ULONG_PTR
cbData est un entier sans signe //Type C : DWORD
__pad_0__ est entier sur 4
lpData est un entier système //Type C : PVOID
FIN
ST_MaStructure est Structure
n est entier sur 1
tabCopies est tableau fixe de 4 COPYDATASTRUCT
FIN |
Donne :
Code:
1 2 3 4 5 6 7
| ST_MaStructure est Structure
n est entier sur 1
__pad_0__ est entier sur 1
__pad_1__ est entier sur 2
__pad_2__ est entier sur 4
tabCopies est tableau fixe de 4 COPYDATASTRUCT
FIN |
(car ça traite la dernière structure du code source)
En espérant que ça en aide certains. Il est rare d'en avoir besoin, mais quand on en a besoin...
Notez que c'est fait "à l'arrache" et donc que ça peut rester buggé...
Et, rétrospectivement, j'aurais pu utiliser un tableau fixe d'entiers sur 1 pour le padding :)