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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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#
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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...