Bonjour à tous

Je souhaite appeller depuis mon code C# une fonction C ayant la signature suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
bool GetMyStructC(MyStructC mystruct);
où MyStructC est définie ainsi :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
struct MyStructC
{
 BYTE data[88]
};
J'ai donc défini une structure en C# équivalente à celle en C

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
unsafe struct MyStructCSharp
{
 public fixed Byte data[88];
};
puis rajouter le DLLImport suivant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
[DllImport("ma_dll_C.dll")]
static extern Boolean GetMyStructC(MyStructCSharp mystruct);
enfin j'apelle cette fonction depuis le code C# de la façon suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
MyStructCSharp myStruct = new MyStructCSharp();
GetMyStructC(myStruct);
Le problème est que au retour de cette fonction, le contenu de myStruct reste inchangé !

Je me suis dis qu'il fallait surement utiliser les attributs in, out ou ref, mais cela me lève des erreurs. J'ai aussi essayé de fournir à la fonction GetMyStruct un IntPtr pointant sur une zone de mémoire allouée avec Marshall.AllocHGlobal ... mais sans succès

Pouvez-vous m'indiquer quel est le meilleur moyen pour obtenir le contenu de MyStructC qui est retourné par la fonction C (Sachant que je travail en CF .NET 3.5)?

Merci