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 :
Devient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Puis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
(car ça traite la dernière structure du code source)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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![]()






Répondre avec citation
Partager