ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
1115
1115
EMPFEHLEN
-
Hallo,
ich versuche im Moment mittels JNA und der DLL eines Kartenleseres(Scard32.dll) auf selbigen zuzugreifen und Karten auszulesen bzw. zu beschreiben. Allerdings scheitere ich daran die Rückgabewerte des Kartenlesers richtig zu verarbeiten. Im Moment wir der Befehl der in cmd steht an den Kartenleser geschickt der fröhlich blinkt und als Ergebnis bekomme ich nur eine Ausgabe der Art [B@14a9972 (Pointer?), der echte Rückgabewert wäre "active" also Status des Kartenlesers. Der Kartenleser ist ein SCM chipdrive micro pro mit dazugehörigem Treiber. Weiß vielleicht jemand wie ich an den richtigen Rückgabewert komme ? Vielen Dank schonmal.
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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
package jnative; import java.nio.ByteBuffer; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; public class Scard { // This is the standard, stable way of mapping, which supports extensive // customization and mapping of Java to native types. public interface Scard32 extends Library { Scard32 INSTANCE = (Scard32)Native.loadLibrary(("C:\\windows\\system32\\SCARD32.dll"), Scard32.class); public int SCardComand(Long Handle, String cmd, Long CmdLen, String DataIn, Long DataInLen, ByteBuffer DataOut, Long DataOutLen); } public static void main(String[] args) { long Handle = 0; String cmd = "Card,Info,Status"; //String cmd = "Card,MemRead,128,6"; long CmdLen = 16; String DataIn = ""; long DataInLen= 0; byte[] bytetest ; bytetest = new byte[50]; long DataOutLen = 255; ByteBuffer bbin = ByteBuffer.wrap(bytetest); try{ Scard32.INSTANCE.SCardComand(Handle, cmd, CmdLen, DataIn, DataInLen, DataOut, DataOutLen); String DataOut = Native.toString(bytetest); System.out.println(bytetest); System.out.println(DataOut); } catch(UnsatisfiedLinkError e){ e.printStackTrace(); } } }
Hier noch das selbe in VBA wo es einwandfrei funktioniert, vielleicht hilft es ja.
Code :1 2 3 4 5 6 7 8 9 10
Declare Function SCardComand Lib "SCARD32.dll" _ (Handle As Long, ByVal cmd As String, CmdLen As Long, _ ByVal DataIn As String, DataInLen As Long, _ ByVal DataOut As String, DataOutLen As Long) As Long Function KartePruefen() D = String(255, 0) SCardComand 0, "Card,Info,Status", 0, nil, 0, D, 255 MsgBox(D) End Function
-
18.03.10 14:16 #2
Das was du hier bekommst ist der Rückgabewert der Methode toString aus der Klasse Object.
Es muss einen Getter für den Wert geben. Wenn du die Klasse editieren und neu compilieren kannst, kannst du auch toString überschreiben und einen String deiner Wahl zurückgeben lassen.Mein kleiner webstart Projektplaner:
http://178.77.101.236/ppws/
Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.
Danke. :)
Ähnliche Themen
-
CardReader gesucht/Internen USB Anschluss nach außen
Von meilon im Forum HardwareAntworten: 2Letzter Beitrag: 30.03.07, 17:23 -
Cardreader
Von Martin Schroeder im Forum C/C++Antworten: 6Letzter Beitrag: 21.04.05, 17:09 -
Probleme mit USB-Cardreader und Windows 2000
Von Robert Steichele im Forum HardwareAntworten: 0Letzter Beitrag: 03.07.04, 09:36 -
cardreader unter win2000
Von hoshisun im Forum Microsoft WindowsAntworten: 3Letzter Beitrag: 20.04.04, 11:41 -
Multi-Cardreader funktioniert nicht
Von zippir im Forum HardwareAntworten: 4Letzter Beitrag: 21.03.04, 23:00





Zitieren
Login





