Bonjour,
Dans le cas d'un interfaçage avec une dll c via P/invoke, je me trouve devant un souci de marshalling sur des Byte[][] contenus dans une structure.
Déclaration de la structure dans le .h de la dll
1 2 3 4 5 6 7 8
| typedef struct CPS_InfosPorteur {
UINT8 CodeCivilite [2];
UINT8 NomPatronym [27];
UINT8 NomMarital [27];
UINT8 Prenoms [3][27];
UINT8 PrenomUsuel [27];
UINT8 CodeLangues [4][2];
} CPS_InfosPorteur ; |
Ma déclaration en c#
1 2 3 4 5 6 7 8 9 10
|
struct CPS_InfosPorteur
{
public Byte[] CodeCivilite; // [2];
public Byte[] NomPatronym; // [27];
public Byte[] NomMarital; // [27];
public Byte[][] Prenoms; // [3][27];
public Byte[] PrenomUsuel; // [27];
public Byte[][] CodeLangues; // [4][2];
} |
Lorsque j'appelle la méthode de la dll, je me prend une exception de marshalling.
Impossible de marshaler le champ 'Prenoms' de type 'TestCSharp.CPS_InfosPorteur' : Il n'existe aucune prise en charge du marshaling pour les tableaux imbriqués.
Comment remédier à cela?
Pour info, j'ai trouvé une parade qui semble fonctionner mais je préférerais ne pas l'utiliser. Au lieu, de passer à ma fonction une structure "CPS_InfosPorteur" contenant des Byte[][], je lui passe un Byte[] dont la taille est égale à la somme des tailles des elements contenus dans ma structure (soit 172).
Mais aprés exécution de la fontion, je dois à la main extraire les données de mon Byte[] pour les remettre dans ma structure...
Partager