La structure doit être définie à côté de Java, en tant que classe avec les membres. Le fait est que JNI permet à C d'accéder aux objets Java, mais pas Java pour accéder aux objets C (structs). Donc, si vous voulez "passer" quelque chose via JNI et l'avoir accessible des deux côtés, il doit s'agir d'un objet Java, puis qualifié comme jobject
dans l'interface. De côté C puis, vous avez deux options:
- soit accéder aux membres directement avec
GetFieldID()
et Get/Set<Type>Field
, mais il est plus compliqué avec les tableaux (vous avez obtenu que je vois)
- ou créer des méthodes Java dans cette classe pour remplir et lire de manière simplifiée, et les appeler avec
Invoke<Retval>Method
Cela dépend de la conception de votre stockage de données. Vous voulez peut-être seulement un côté (C ou Java) à lire et l'autre à écrire, ce qui peut être reflété dans la conception de façon pratique.
Edit:
exemple se trouve sur le site signalé par @asgoth: www.steveolyo.com. Il y a un chapitre intitulé "Passer des structures C de Java à Java" mais ensuite il explique silencieusement comment refléter la structure C requise dans la classe Java et passer l'objet Java dans C via JNI - ce qui est exactement ce que dit ma réponse.
merci pour cela, avez-vous un exemple pour le même. – Rajendra