edurand1
Messages postés11Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention16 juin 2011
-
3 janv. 2011 à 10:20
Utilisateur anonyme -
6 août 2014 à 13:05
Bonjour,
Je dois intégrer en c# un appel à une API dont voici le prototype du .h :
typedef unsigned short (API_ENTRY _DLL_PTR T_Lec_InformationsAPI)
( IN unsigned char FARPTR pcChemin,
IN_OUT unsigned short FARPTR pusLgInformations,
OUT char FARPTR szInformations,
OUT unsigned short FARPTR pusCodeErreur);
j'en ai fait la déclaration suivante :
[DllImport("api_lec.dll")]
unsafe public static extern ushort Lec_InformationsAPI(
char[] pcChemin,
out ushort pusLgInformations,
out char[] szInformations,
out ushort pusCodeErreur);
et l'appel :
char[] pcChemin = (GalssDirectory + "\").ToCharArray();
ushort pusLgInformations = 640;
char[] szInformations = new char[pusLgInformations];
ushort pusCodeErreur;
ushort lReturned = API.Lec_InformationsAPI(pcChemin, out pusLgInformations, out szInformations, out pusCodeErreur);
L'application s'arrête sur ce dernier appel avec une erreur 0xc0000409 non significative.
Par ailleurs, d'autres fonctions fonctionnent bien avec des retours sur des entiers.
Sauriez vous me dire si je fais quelque chose d'incorrect dans le type de données ou l'initialisation de szInformations ?
Merci.
contexte : sous Windows 7 64bits (compilation 32bits), Visual Studio 2008.
edurand1
Messages postés11Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention16 juin 20113 17 févr. 2011 à 12:03
bonjour,
Je fournis le projet complet à qui le demande (par message privé, si j'ai bien compris le principe).
Je ne traite pas la CPS, j'ai quelques blocages de paramétrage du GALSS.
Bonjour edurand1,
je déterre le post... car je suis actuellement sur ce même projet, Sesam n'ayant toujours pas développé leur api_lec.dll en x64.
Si tu as toujours ton projet, je suis intéressé !
Merci
edurand1
Messages postés11Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention16 juin 20113 17 févr. 2011 à 12:13
Je pensais avoir déjà fourni la réponse à mon problème, mais non... donc la voici :
-> La solution est d'utiliser des StringBuilder pour récupérer des chaînes de caractères.
[DllImport("api_lec.dll")]
unsafe public static extern ushort Lec_InformationsAPI(
char[] pcChemin,
out ushort pusLgInformations,
StringBuilder szInformations,
out ushort pusCodeErreur);
6 août 2014 à 13:05
je déterre le post... car je suis actuellement sur ce même projet, Sesam n'ayant toujours pas développé leur api_lec.dll en x64.
Si tu as toujours ton projet, je suis intéressé !
Merci