À partir de C Je crée une DLL qui est chargée en Java. J'appelle certaines fonctions C de java et j'appelle aussi des fonctions Java de C (avec des types de données non complexes) - cela fonctionne bien.Comment transférer une structure C vers Java en utilisant JNI?
Je me bats avec le transfert d'une structure C vers Java.
Voici un petit exemple décrivant ce que je veux faire. Ce n'est pas complet et peut-être pas correct parce que mon problème est que je ne suis pas sûr de savoir comment le faire.
Mon but est de passer une structure du type "StructType" de C vers Java afin d'utiliser les valeurs dans le programme Java.
En 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);
}
En 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);
}
Merci d'avance pour votre aide.
Steffen
Merci Vladimir. La structure est un peu plus complexe que dans l'exemple et je dois l'utiliser. Mais comment puis-je accéder à l'objet java à partir de la structure dans la fonction C pour utiliser les setters et getters (en suivant l'exemple)? –
a mis à jour la réponse. –