Problème avec la fonction SCardTransmit

Problème avec la fonction SCardTransmit - C - Programmation

Marsh Posté le 09-09-2009 à 16:48:12    

Bonjour,  
 
je souhaite développer un logiciel Windows qui permettra de communiquer avec les cartes SIM, via des commandes APDU.
Je voudrais le faire en Java, mais en appelant les fonctions de winscard.dll via la Java Native Interface (j'ai fait le choix de rester en Java malgré cette difficulté).
 
J'ai implémenté les fonctions SCardEstablishContext, SCardConnectW, SCardStatus, SCardReleaseContext, SCardDisconnect via cette technique, et elles fonctionnent toutes.
Je détaille ma manière de procéder pour pouvoir vous dire à quelle étape j'ai un problème :
 
But : Créer une dll JNI que Java pourra appeler, qui va elle-même communiquer avec la dll native Winscard.dll.
 
1) Je crée un fichier .java dans lequel je déclare les méthodes de la dll. Je compile. (Dans cette classe il y a aussi System.loadLibrary("MaDllJni" ) )
 
2) Je génère le header en utilisant une instruction jni à partir du fichier .class créé en 1).
 
3) Je crée un .c qui implémente les méthodes que l'on veut avec des macros JNI (JNI EXPORT etc...). Compilation, on a un fichier.o
 
4) On crée un fichier .def avec la commande dlltool -k MaDllJni.o -z MaDllJni.def . J'enlève les alias du fichier (c'est écrit en suivant ce tutorial : http://johannes-fetz.blogspot.com/ [...] jni.html).
 
5) Je crée la dll avec gcc -shared -o MaDllJni.dll  -I"C:\Program Files\Java\jdk1.6.0_16\include" -I"C:\Program Files\Java\jdk1.6.0_16\include\win32" MaDllJni.def MaDllJni.o
 
6) Ensuite je crée un fichier .java contenant une méthode main, et je lance tout sous Eclipse.
 
 
Cela marche avec quasiment toutes les méthodes, sauf une, et la plus importante... : SCardtransmit, qui permet d'envoyer les commandes APDU à la carte...
Le problème se situe au niveau du second argument (du type SCARD_IO_REQUEST). L'aide Windows conseille de mettre SCARD_PCI_T0. Cependant un problème se produit lors de l'étape 5 avec un "undefined reference to 'SCARD_PCI_T0'" alors que tout est censé être déclaré dans winscard.h ...  
Plus précisemment le problème semble être lié à g_rgSCardT0Pci (élément figurant dans la winscard.dll après l'avoir parcourue...) et qui participe à la définition de SCARD_PCI_T0.
 
Ca fait plusieurs jours que je cherche une solution, mais je rame complètement.
 
Pour info je développe sous windows avec les compilateurs de MinGw dernière version.
Désolé d'avance si mes propos sont confus, mais je suis loin d'être un pro en programmation..
 
Avez-vous des idées ?
 
Merci..

Reply

Marsh Posté le 09-09-2009 à 16:48:12   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed