Importer une struct du C (avec char**) vers le C#

mcallan Messages postés 17 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 28 janvier 2011 - 5 oct. 2009 à 16:31
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 6 oct. 2009 à 19:19
Bonjour,

J'ai une fonction C qui retourne une struct et je souhaite l'utiliser en C#

typedef struct strct_Err
{
int iErr;
int iMsgCount;
char* pstructMsg[2048];
} StructErr;

StructErr foo();

en C#: j'ai:

[StructLayout(LayoutKind.Sequential)]
public unsafe struct strct_Err
{
public int iErr;
public int iMsgCount;
IntPtr pstructMsg;
}

[DllImport(MY_DLL, CharSet = CharSet.Ansi)]
public static extern strct_Err foo();

Cela compile et mais cela crash a l'execution.

le probleme vient de l'import de la struct et particulierement de IntPtr pstructMsg;

Si je commente IntPtr pstructMsg; dans le C et C# cela fonctionne correctement

Qu'elle est bonne definition de cette struct en C# ?

Merci de votre aide

:)

3 réponses

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
6 oct. 2009 à 12:27
Bonjour,
pstructMsg est un pointeur sur une chaine de caractère d'une certaine longueur (2048).

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public unsafe struct strct_Err
{
public int iErr;
public int iMsgCount;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2048)]
public string pstructMsg;
}

++
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 oct. 2009 à 13:40
Salut, je vois plutôt un tableau de chaines et comme la fonction retourne la structure par valeur c'est pas évident de marshaller ça de manière élégante, pour que ça ne plante pas il faut créer coté C# une struct qui a la même taille que celle en C.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 oct. 2009 à 19:19
Je pense que ta définition C++ est fausse.
0
Rejoignez-nous