Appel API, pointeur char[]

Résolu
edurand1 Messages postés 11 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 16 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.

3 réponses

edurand1 Messages postés 11 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 16 juin 2011 3
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.
2
Utilisateur anonyme
6 août 2014 à 13:05
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
0
edurand1 Messages postés 11 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 16 juin 2011 3
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);


bon code.
1
gaggy Messages postés 1 Date d'inscription dimanche 23 novembre 2008 Statut Membre Dernière intervention 17 février 2011
17 févr. 2011 à 11:25
Bonjour,

Je butte également sur les appels aux API de la carte Vitale que je dois écrire en C#

Avez-vous réussi depuis à appeler les fonctions T_Lec_LectureVitale et T_Lec_InformationsAPI ? Si oui, avec quelle déclaration C# ?

Merci d'avance pour vos informations !
-1
Rejoignez-nous