Partage de structures

Rappelons que le type structure fédère plusieurs champs pouvant être de types différents. Le type structure est très utilisé dans les échanges entre le C# et le C/C++ parce qu’il évite de passer trop de paramètres aux fonctions en agrégeant l’ensemble des informations sur l’objet à traiter.

L’exemple qui suit (projet PInvoke05 à télécharger) montre la transmission d’une structure représentant un client par ses nom, prénom, âge et numéro de téléphone.

1. Déclaration des structures

Côté C/C++ :

#pragma pack(push, AppPack) 
#pragma pack(1) 
 
struct Client 
{ 
    bool actif; 
    char nom[25]; 
    char prenom[25]; 
    BYTE age; 
    char telephone[20]; 
    int compteClient; 
}; 
 
#pragma pack(pop, AppPack) 

Chaque champ "texte" de la structure est stocké dans un tableau de caractères de taille prédéfinie. Une directive de "packing" permet de fixer l’alignement des champs sur l’octet. En effet, en fonction des optimisations du compilateur C/C++, les champs des structures ne sont pas obligatoirement contigus en mémoire. Le compilateur peut insérer des octets dits de padding entre eux pour que le microprocesseur accède plus rapidement car il a été optimisé...

couv_RI4CAPOO.png

Découvrez 

le livre :

Aussi inclus dans nos :

Précédent
Échange de tableaux
Suivant
Les directives [In] et [Out]