[C#] Encore moi et mes API
Re !
J'ai toujours en encore des problèmes avec ces API. Je m'explique :
Dans mon programme tout d'abord, j'initialise les bibliothèques que j'utilise avec une API
Code:
1 2 3
|
[DllImport("ssvw32.dll")]
public static extern int SSV_InitLIB(); |
jusque là ca va.
Ensuite j'initialise une session en mémoire pour y stocker des données via une autre API :
Code:
1 2 3
|
[DllImport("sgdw32.dll")]
public static extern int SGD_ReserverSession(int Taille, out int NumeroSession); |
je l'appelle de la sorte :
Code:
1 2 3 4
|
retour = SGD_ReserverSession(taille, out NumeroSession);
if (retour != 0)
MessageBox.Show("Erreur de création de session : " + retour.ToString()); |
Ici aussi tout se passe bien. Je récupère en sortie la session de numéro '1'.
Je lis ensuite des données contenues sur une carte via une autre API : Toujours pas de problème. Les données sont bien copiées en mémoire.
MAIS je m'arrive pas a les extraire en variables managées !!!
je fais appel a cette API :
Code:
1 2 3
|
[DllImport("sgdw32.dll")]
public static extern int SGD_LireChamp(int NumeroSession,int IdGroupe, int OccurenceGroupe, int NumeroChamp, out string ValeurChamp, out int TailleMax); |
et l'appel :
Code:
1 2
|
retour = SGD_LireChamp(NumeroSession, 1, 1, 6, out VChamp, out TailleMax); |
J'ai donc deux paramètres en sortie.
Je récupère sans problemes le 'int' (comme plus haut avec la méthode reserversession) mais impossible de récupérer la chaine de caractères !! J'ai un plantage du genre : "La référence d'objet n'est pas définie a une instance etc etc etc".
Pourtant mes varaibles sont bien déclarer, j'ai déjà vérifier.
Code:
1 2 3
|
string VChamp = null;
int TailleMax = 31; |
J'ai essayer d'initialiser VChamp a une autre valeur.
j'ai meme essayer de marshaller le tout mais.... que dalle !!
HELP MEEEEEEE !!!!!!!!!!!!
Même pb pourtant avec StringBuilder
Bonjour,
Je suis confronté au même problème !
L'appel de la fonction me retourne bien 0 mais la variable passée en paramètre reste désespérement vide !
Qd j'utilise la fonction SGD_LireChampFichier je récupère bien des données dans le fichier destination.
Ce qui est étonnant c'est que j'utilise pourtant un StringBuilder.
J'ai tout essayé mais là je ne vois plus quoi faire.
Ca serait vraiement sympa et ça m'aiderait énormément si tu pouvais me dire ce qui semble incorrecte dans mon code
voir mieux renvoyer un bout de code similaire mais qui marche.
Voici mon code : je ne vois pas ce qui est incorrecte :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| [DllImport("sgdw32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private static extern ushort SGD_LireChamp(
ushort NumeroSession,
ushort IdGroupe,
ushort OccurrenceGroupe,
ushort NumeroChamp,
StringBuilder ValeurChamp,
out int TailleMax
);
SSV_InitLIB();
SSV_InitTrace("ssv.log", "ab", 0, 'Z');
string nomRessourcePS = "CPS";
string nomRessourceLecteur = "Log_SV";
string codePorteurPS = "1234";
ushort session;
SGD_ReserverSession(4000, out session);
SIS_LireCartePS(nomRessourcePS, nomRessourceLecteur, codePorteurPS, session);
int taille;
StringBuilder valeurChamp = new StringBuilder(31);
SGD_LireChamp(session, 1, 1, 6, valeurChamp, out taille);
Console.Out.WriteLine("val = {0}", valeurChamp.ToString());
SGD_LireChampFichier(session, 1, 1, 6, "dump.txt"); |
val=
et dans dump.txt : Luc
Problème d'affichage des valeurs
Bonjour je suis moi aussi sur cette API ,mon souci c'est que j'ai testé mon code j'ai aucune erreur,mais losque je veux lire une carte CPS de test rien ne s'affiche.
j'ai testé avec le meme code aucun resultat.j'utilise le lecteur twin 30 SAGEM MONETEL.
aidez moi svp!