IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

API et alignement de structures


Sujet :

Contribuez

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Par défaut 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 : 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
    Devient :

    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
    Puis :

    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
    Donne :

    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
    (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
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Réponses: 26
    Dernier message: 16/06/2016, 13h26
  2. API pour lire la structure d'un .class
    Par goldeneagle1 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 29/12/2009, 11h42
  3. alignement de structure
    Par dus dans le forum MFC
    Réponses: 3
    Dernier message: 23/06/2006, 19h21
  4. Réponses: 5
    Dernier message: 03/03/2006, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo