Da C Sto creando una DLL che viene caricata in Java. Io chiamo alcune funzioni C da java e chiamiamo anche funzioni Java da C (con tipi di dati non complessi) - funziona perfettamente.Come trasferire una struttura C in java utilizzando JNI?
ho lotta con il trasferimento di una struttura C a Java.
Ecco un piccolo esempio descriping quello che voglio fare. Non è completo e forse non è corretto perché il mio problema è che non sono sicuro di come farlo.
Il mio obiettivo è quello di passare una struttura del tipo "StructType" da C a Java al fine di utilizzare i valori nel programma Java.
In C
typedef struct {
unsigned char value1;
unsigned char value2;
} StructType;
void passStructToJava(StructType* myStruct)
{
class cls;
jmethodID mid;
/* GlobalEnv, GlobalObj are globlal values which are already set */
cls = (*GlobalEnv)->GetObjectClass(GlobalEnv, GlobalObj);
mid = (*GlobalEnv)->GetMethodID(GlobalEnv, cls, "receiveStructFromC", "(LPackage/StructType;)V");
(*GlobalEnv)->CallVoidMethod(GlobalEnv, GlobalObj, mid, myStruct);
}
In Java
public class StructType {
public int value1; /* int because there is no uint8 type */
public int value2;
}
public StructType mMyStruct;
public StructType getMyStruct() {
return mMyStruct;
}
public void setMyStruct(StructType myStruct) {
mMyStruct = myStruct;
}
public void receiveStructFromC(StructType myStruct)
{
setMyStruct(myStruct);
}
Grazie in anticipo per il vostro aiuto.
Steffen
Grazie Vladimir. La struttura è un po 'più complessa come nell'esempio e ho bisogno di usarla. Ma come posso accedere all'oggetto java dalla struttura nella funzione C per usare setter e getter (seguendo l'esempio)? –
ha aggiornato la risposta. –