Sommaire

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 entre eux pour que le microprocesseur accède plus rapidement car il a été optimisé pour ...