Appel API, pointeur char[]

[Résolu]
Signaler
Messages postés
11
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
16 juin 2011
-
Messages postés
1
Date d'inscription
mercredi 6 août 2014
Statut
Membre
Dernière intervention
6 août 2014
-
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

Messages postés
11
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
16 juin 2011
3
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.
Messages postés
1
Date d'inscription
mercredi 6 août 2014
Statut
Membre
Dernière intervention
6 août 2014

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
Messages postés
11
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
16 juin 2011
3
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.
Messages postés
1
Date d'inscription
dimanche 23 novembre 2008
Statut
Membre
Dernière intervention
17 février 2011

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 !