Appel API, pointeur char[] [Résolu]

edurand1 11 Messages postés jeudi 28 août 2003Date d'inscription 16 juin 2011 Dernière intervention - 3 janv. 2011 à 10:20 - Dernière réponse : QuentinBl 1 Messages postés mercredi 6 août 2014Date d'inscription 6 août 2014 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
edurand1 11 Messages postés jeudi 28 août 2003Date d'inscription 16 juin 2011 Dernière intervention - 17 févr. 2011 à 12:03
1
Merci
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.

Merci edurand1 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

QuentinBl 1 Messages postés mercredi 6 août 2014Date d'inscription 6 août 2014 Dernière intervention - 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
Commenter la réponse de edurand1
Meilleure réponse
edurand1 11 Messages postés jeudi 28 août 2003Date d'inscription 16 juin 2011 Dernière intervention - 17 févr. 2011 à 12:13
1
Merci
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.

Merci edurand1 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de edurand1
gaggy 1 Messages postés dimanche 23 novembre 2008Date d'inscription 17 février 2011 Dernière intervention - 17 févr. 2011 à 11:25
0
Merci
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 !
Commenter la réponse de gaggy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.