Hallo,
ich habe mal wieder eine Frage bezüglich dem Thema. Nachdem ich durch JNA unter Windows wunderbar auf meine Memory Card DLL (von SCM) zugreifen konnte, wollte ich das gleiche Verfahren auch unter Linux anwenden.
Habe mir also ein Ubuntu geschnappt, Java drauf gepackt, die Card Reader Treiber, pcsc lite (Muscle) und die MCard API installiert. Die Verbindung wurde mit pcsc_scan getestet und funktioniert, RFID-Karten mittels Java auslesen und schreiben kein Thema. Dann habe ich versucht eine MemoryCard auszulesen und dazu brauche ich die MCard API. Also habe ich die Klasse den entsprechenden Namen gegeben (libmcscm), den Rest habe ich aus der Windowsversion übernommen, da die beide die gleichen Funktionen enthalten. Gleiches gilt für die libpcsclite und WinSCard.
Das Laden der Libraries funktioniert ebenfalls, zumindest gibt es keine Fehler von Java, erst wenn ich eine Methode aufrufe kommt folgender Fehler: Exception in thread "main" java.lang.IllegalArgumentException: Unrecognized calling convention: 1. Folglich müsste mein Methodenaufruf falsch sein, aber lt. Doku ist es völlig richtig. Daher gehe ich davon aus, dass Java die falschen Libraries ladet. Google hat dazu gemeint ich soll den kompletten Pfad der loadLibrary-Methode übergeben. Wenn ich das tue, dann findet Java die Library nicht mehr. Nun drehe ich mich im Kreis und sehe vor lauter Bäumen kein Wald mehr.
Jemand eine Idee was ich noch unternehmen könnte? Hat das schon mal wer gemacht?
Hier noch eine Auszug aus dem loadLibrary und dem Methodenaufruf:
ich habe mal wieder eine Frage bezüglich dem Thema. Nachdem ich durch JNA unter Windows wunderbar auf meine Memory Card DLL (von SCM) zugreifen konnte, wollte ich das gleiche Verfahren auch unter Linux anwenden.
Habe mir also ein Ubuntu geschnappt, Java drauf gepackt, die Card Reader Treiber, pcsc lite (Muscle) und die MCard API installiert. Die Verbindung wurde mit pcsc_scan getestet und funktioniert, RFID-Karten mittels Java auslesen und schreiben kein Thema. Dann habe ich versucht eine MemoryCard auszulesen und dazu brauche ich die MCard API. Also habe ich die Klasse den entsprechenden Namen gegeben (libmcscm), den Rest habe ich aus der Windowsversion übernommen, da die beide die gleichen Funktionen enthalten. Gleiches gilt für die libpcsclite und WinSCard.
Das Laden der Libraries funktioniert ebenfalls, zumindest gibt es keine Fehler von Java, erst wenn ich eine Methode aufrufe kommt folgender Fehler: Exception in thread "main" java.lang.IllegalArgumentException: Unrecognized calling convention: 1. Folglich müsste mein Methodenaufruf falsch sein, aber lt. Doku ist es völlig richtig. Daher gehe ich davon aus, dass Java die falschen Libraries ladet. Google hat dazu gemeint ich soll den kompletten Pfad der loadLibrary-Methode übergeben. Wenn ich das tue, dann findet Java die Library nicht mehr. Nun drehe ich mich im Kreis und sehe vor lauter Bäumen kein Wald mehr.
Jemand eine Idee was ich noch unternehmen könnte? Hat das schon mal wer gemacht?
Hier noch eine Auszug aus dem loadLibrary und dem Methodenaufruf:
Java:
libpcsclite winSCard = (libpcsclite) Native.loadLibrary("pcsclite", libpcsclite.class);
libmcscm mcscm = (libmcscm) Native.loadLibrary("mcscm", libmcscm.class);
int error = winSCard.SCardEstablishContext(libpcsclite.SCARD_SCOPE_SYSTEM,
pvReserved1, pvReserved2, phContext);