Hallo,
Ich Versuche mit JNI eine Methode(geschrieben in c) auf meine Java-Applikation aufzurufen,aber diese Methode ruft schon mehrere c-methodes,was soll ich machen?:nur die Hauptmethode native in meine java-code zu deklarieren oder alle in meiner HMethode augerufene methode native deklarieren?
Bitte Hilfe ich kann nicht fortsetzen mit meiner Aufagbe!
danke!
Hallo,
wer ruft da was auf? Kannst du das vielleicht etwas anders beschreiben?
/Dirk
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
Ich habe eine graphische Oberfläsche mit Java programmiert um eine die Inhalt einer Chipkarte zu visualieren.wenn ich auf ein Button(ReadButton)anklickt dann wird die Daten der Karte auf meine GUI angezeigt.die Funktion zum auslesen der Chipkarte habe ich in c programmiert die Funktion heiß ReadBinary().um auf die Kartendaten zuzugreifen ruft meine funktion ReadBinary eine andere Funktion,die aus einer Dll stammt.Die Dlldatei lade ich dynamisch auf mein programme z.B so:
define DLL_DATEI „.\CTPCSC31kv.DLL“
typedef CHAR ( WINAPI *PROC_INIT )(USHORT, USHORT );
typedef CHAR ( WINAPI *PROC_DATA )( USHORT, UCHAR *, UCHAR *, USHORT, UCHAR *, USHORT*, UCHAR * );
typedef CHAR ( WINAPI *PROC_CLOSE )( USHORT );
PROC_INIT initptr;
PROC_DATA dataptr;
PROC_CLOSE closeptr;
int main()
{
HINSTANCE hlib;
/* dll für die Programmierung des Geräte(SCR X31) laden*/
hlib = LoadLibrary(DLL_DATEI);
if(hlib != NULL)
{
initptr = (PROC_INIT)GetProcAddress (hlib,„CT_init“);
dataptr = (PROC_DATA)GetProcAddress(hlib,„CT_data“);
closeptr = (PROC_CLOSE)GetProcAddress(hlib,„CT_close“);
if((initptr != NULL) && (dataptr != NULL) && (closeptr != NULL))
{
do something;
}
}
}
danach schreibe ich meine Methode,und in dieser Methode rufe ich meine dll Funktion etwa so:
JNIEXPORT jstring JINICALL Java_KVKView_ReadBinary(JNIEnv *env,jobject obj,jchar CardTerminal )
{
char Res[MAXBYTES];
jbyteArray Cmd;
jstring Response;
jbyte Dad,Sad;
Cmd ={CLA_READ_BINARY,READ_BINARY,0x00,0x00,0x00};
jchar RC;
jshort CmdLen,DataLen;
CmdLen =5;
//
// Anwendungsdatei der KVK auslesen
Dad = ICC;
Sad = HOST;
DataLen = MAXBYTES;
jsize cmdsize =(env*)->GetArrayLength(env,CmdLen);
//jsize ressize =(env*)->GetArrayLength(env,DataLen);
jbyte *cmdbyte =(env*)->GetbyteArrayElements(env,Cmd);
//jbyte *resbyte =(env*)->GetbyteArrayElements(env,Response);
if( !(RC = dataptr( CardTerminal, Dad, Sad, cmdsize, cmdbyte,DataLen, Response)))
{
(env,Response,resbyte,0);
return Response;
}
}
dataptr ist die funktionzeiger auf die dllfunktion die ich aufrufe.Meine Frage ist erkennt Jni die Funktion!oder wie kann ich das am bestens programmieren!
es war einbißchen lang es tut mir leid ich bin keine Deutschsprachrig.
danke für die Bemühung!
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Es war nicht die Sprache, sondern mir war halt nicht klar, welche Methoden du über JNI derzeit ansprechen möchtest und welche nicht.
Wenn ich es richtig verstanden habe, willst du nur eine über JNI ansrechen. Diese Methode ruft aber wieder andere Funktionen auf, die in einer DLL stecken.
Korrigiere mich bitte, wenn ich da falsch liege.
Das sollte an sich kein Problem darstellen, solange die DLL’s gefunden werden können.
Wenn die Funktionalität schon einmal programmert wurde, wäre es unsinnig, sie noch einmal über JNI einzubinden.
/Dirk