Re^2: Probleme mit Java Native Interface!
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]