nnicolas
Messages postés1Date d'inscriptionmercredi 2 janvier 2008StatutMembreDernière intervention17 septembre 2008
-
17 sept. 2008 à 11:12
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
20 sept. 2008 à 21:21
Bonjour,
Je rencontre une Exception AccesViolation lorsque j'appelle une méthode de la dll c via mon prog en c#.
La méthode appelée à pour argument une structure composée de plusieurs champs de type Byte[].
J'ai remarqué que si je passe, à la place de la structure qui cause l'exception, un Byte[] dont la taille est égale à celle de la somme des tailles des champs de ma structure, cela fonctionne mais il faut effectuer un traitement assez chiant pour remplir la stucture avec mon Byte[].
Voici comment elle déclarée la fonction en C
CPS_InformationsPorteur ( UINT16 NumSession, struct CPS_InfosPorteur PTR pIP,
struct CPS_StatusService PTR pStatusService, PUINT16 pEtatCarte);
La structure qui cause l'exception:
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 ;
En C# j'ai traduit cette structure par:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct CPS_InfosPorteur
{
public Byte[] CodeCivilite;
public Byte[] NomPatronym;
public Byte[] NomMarital;
public Byte[] Prenoms1;
public Byte[] Prenoms2;
public Byte[] Prenoms3;
public Byte[] PrenomUsuel;
public Byte[] CodeLangues1;
public Byte[] CodeLangues2;
public Byte[] CodeLangues3;
public Byte[] CodeLangues4;
}
Je pense qu'il s'agit d'un pb de déclaration au niveau de ma structure.
Je ne m'explique pas que si je passe une ref vers une structure ne contenant que des Byte[] j'obtiens une Exception alors que si je passe un Byte[] ca passe...
Je ne comprend pas non plus le fait que passer une ref vers un Byte[] puisse poser des pb. Après tout, cela correspond à un passage par référence ce que fait nativement C# pour la majorité des types !