2Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
13
13
ZUGRIFFE
639
639
EMPFEHLEN
-
Hallo,
zu erst bin relativ neu in der Materie,
und wäre froh wenn mir jemand ein zwei Fragen beantworten könnte.
Ich soll daten von einer Chipkarte Lesen...
und da fängt gleich das erste problem an ...
das einbinden der c-bibliotek hat soweit ja noch geklappt (
CLibrary INSTANCE = (CLibrary)
Native.loadLibrary((Platform.isWindows() ? "Winscard" : "c+"),CLibrary.class);
)
aber der auf ruf der ersten methode daraus , Liefert nicht das gewünschte Ergebniss:
die Methode um die es sich handelt ist
SCardSCardEstablishContext{
DWORD dwScope,
LPCVOID pvReserved1,
LPCVOID pvReserved2,
LPSCARDCONTEXT phContext }
diese methode verlangt ja das man ihr 4 parameter übergibt.
soweit auch gut bis auf den fakt das das ja keine java daten typen sind ...
also dacht ich mir ersetze diese "unbekanten" datentypen mit java datentypen ( ich denk mal das ich die Falschen genommen habe da ich jetz den fehler code :
80100004 also SCARD_E_INVALID_PARAMETER bekomme)
meine frage ist also welche daten typen ich am besten verwenden soll zur übergabe
Ich würd mich freund wenn mir jemand helfen könnte
vielen dank für die Bemühungen einen Anfänger zu helfen .
mfg Gradrag
-
Hi und Willkommen bei tutorials.de

DWORD ist ein 32bit-unsigned-int. Sowas gibts in Java nicht.
Allein vom Bitaufbau her sollte es ein "normales" signed-32bit-int auch tun.
LPCVOID ist ein Pointer auf irgendwas nicht genau Bekanntes.
Auch das gibts in Java nicht.
Entsprechen tun auch dem ints, allerdings je nach Plattform 4 oder 8 Byte groß.
LPSCARDCONTEXT ist ein Pointer auf eine Struktur. Das wird problematisch.
Wäre es für dich eine Option, einen C-Wrapper zu schreiben?Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Schonmal vielen dank das sich einer gemeldet hat

c-Wrapper ich denk mal ist ne option also wens nötig ist wohl ja muss aber erstmal schaun was das ist und wies geht
meld mich dann wenn ich dazu die information (ggf. weitere fragen habe
)
Nachmals vielen vielen dank und werd es gleich mal mit den Int werten versuchen
-
Wie gesagt, mit der Struktur im letzten Parameter wirst du mit int nicht weiterkommen.
Mit C-Wrapper meine ich, dass du mit C statt Java einen kleinen Code schreibst,
der die Funktion aufruft (da sie auch in C geschrieben ist),
aber selbst für Java passende Parameter nimmt.
Wenn du mir den Strukturaufbau einmal zeigst könnte ich dir besser helfen.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
mh gut nen c-compiler dürft ich glaub schon haben zwar noch nich wirklich was in c geschrieben aber das heist wohl hinsetzen lernen

Meinst das mit stucktur oder von welcher strucktur redest du ?
PHP-Code:/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package testlauf;
/**
*
* @author mija
*/
import java.util.*;
import java.nio.Buffer;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Platform;
import com.sun.jna.WString;
import com.sun.jna.win32.StdCallLibrary;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
public class Testlauf {
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)
Native.loadLibrary((Platform.isWindows() ? "Winscard" : "c+"),CLibrary.class);
// eingebundene Lib
public Long SCardEstablishContext(
int dwScope,
int pvReserved1,
int pvReserved2,
int phContext
);
}
public Long uebergabe(int a,int b,int c,int d){
Long e=CLibrary. INSTANCE.SCardEstablishContext(a,b,c,d);
return e;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
NewJFrame a=new NewJFrame();
a.setVisible(true);
}
}
-
Mit Struktur (struct) meine ich SCARDCONTEXT (auf der C-Seite, nicht in Java).
Du solltest eine/mehrere .h-Dateien haben, da drin sollte SCARDCONTEXT zu finden sein.
Und bitte Forenregeln beachten. Erster Link in meiner Signatur, §15.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
So das ist das Einzige was ich bis jetz zu SCARDCONTEXT gefunden habe in winscard.h
PHP-Code:typedef ULONG SCARDCONTEXT;
typedef SCARDCONTEXT *PSCARDCONTEXT, *LPSCARDCONTEXT;
typedef ULONG SCARDHANDLE;
typedef SCARDHANDLE *PSCARDHANDLE, *LPSCARDHANDLE;
#define SCARD_AUTOALLOCATE (DWORD)(-1)
#define SCARD_SCOPE_USER 0 // The context is a user context, and any
// database operations are performed within the
// domain of the user.
#define SCARD_SCOPE_TERMINAL 1 // The context is that of the current terminal,
// and any database operations are performed
// within the domain of that terminal. (The
// calling application must have appropriate
// access permissions for any database actions.)
#define SCARD_SCOPE_SYSTEM 2 // The context is the system context, and any
// database operations are performed within the
// domain of the system. (The calling
// application must have appropriate access
// permissions for any database actions.)
Hoffe das ist die Strucktur die du brauchst.
-
Auch ein Int-Typ?
Sorry...dachte, es ist eine struct.
Jedenfalls ja, das ist die richtige Codestelle.
...Wenn das so ist, kannst du für diesen vierten Parameter
genauso verfahren wie mit dem ersten (DWORD).
Der C-Wrapper ist damit überflüssig geworden.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Ich bedank mich recht herzlich bei dir , Danke.
Aus diesen H-Datein dürfte ich doch dann auch sicherlich herrausbekommen wieso der Rückgabewert immer SCARD_E_INVALID_PARAMETER und welche konkreten Werte ich der Methode übergeben muss?
pvReserved1 und int pvReserved2 dürften ja 0 sein da:
(http://msdn.microsoft.com/en-us/library/ms938536.aspx)pvReserved1
[in] Void pointer reserved for future use; must be NULL. Reserved to enable a suitably privileged management application to act on behalf of another user.
pvReserved2
[in] Void pointer reserved for future use; must be NULL. Reserved to enable a suitably privileged management application to act on behalf of another terminal.
-
Ja, wenn das da steht, übergibst du von Java aus 0.
Das "reserved" hat darauf sowieso schon hingewiesen.
Bleiben noch der erste und der letzte Parameter als Fehlerquelle.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Ich glaube es liegt an der letzten da
[PHP#define SCARD_SCOPE_USER 0 // The context is a user context, and any
// database operations are performed within the
// domain of the user.
#define SCARD_SCOPE_SYSTEM 2 // The context is the system context, and any
// database operations are performed within the
// domain of the system. (The calling
// application must have appropriate access
// permissions for any database actions.)][/PHP]
ja den ersten Parameter auf 1 und 2 beschränkt
Leider find ich nichts für den 4ten Parameter.
mir ist blos aufgefallen da es nicht wie die anderen ein [in] sondern [out] parameter ist
und dies gibt es doch glaub ich garnicht bei Java? Oder irre ich mich da? Falls ja unter was könnte ich nachschlagen um dieses Problem zu umgehn?
-
out? Mist. Die gibt in Java schon auch, aber das ist nicht das Problem.
Das Problem ist, dass Java einfach nicht mit Pointeradressen umgehen kann.
Schön langsam rückt der C-Wrapper wieder in den Bereich des Sinnvollen...Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Dann nochmals vielen Dank , mit dem C-Wrapper werd ich mich morgen beschäftigen. Bedank mich rechtherzlich bei dir , und hoffe kann bald auch Leuten so wie du.
-
Guten Tag,
wie geschrieben hab ich mich mitlerweile mit C auseinandergesetzt.
dabei bin ich auf ein weiteres Problem gestoßen ( falls ich das lieber im C/c++ posten soll bitte bescheidgeben, wollte kein unnötiges neue Thema eröffnen)
Problembeschreibung:
-einbingung von H-Datein in ein C-Programm
normalerweise :
#include <LibraryName>
und nun kann ich die dort enthaltenen Funktionen nutzen aber :
erzeugt beim Compelieren folgenden Fehler:PHP-Code:#include <stdio.h>
#include <stdlib.h>
#include <C:\Program Files (x86)\HID Global\Sync-API\Include\WinSCard.h>
/*
*
*/
int main(int argc, char** argv) {
long c =SCardEstablishContext(0,0,0,0);
return (EXIT_SUCCESS);
}
build/Debug/Cygwin-Windows/main.o.d:1: *** Mehrfache Target-Muster. Schluss.
make: *** [.build-impl] Fehler 2
wodran könnt das liegen ?
(Ps: muste für die Library den gesammte Pfard angeben da ansonsten kam : Datei nicht gefunden
Und mit einer selbsterstelten H-datei zur Probe hat aber das Programm ohne murren funktioniert.
Mit freundlichem Gruß
Gradrag





Zitieren

Login





