Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Accès rapide :

Utilisation de code natif : Compléments d?informations sur JNI


Notes:

Les difficultés pour les chaînes de caractères, c'est qu'elles sont représentées en ASCII pour le langage C (sizeof(char) == 1) et en Unicode pour Java. Il faut donc à chaque échange (qu'importe le sens) générer une nouvelle chaîne adaptée au langage récepteur. Grâce à l'environnement JNI, des fonctions de conversions vous sont proposées, comme le montre l'exemple qui suit.

Mais attention à un détail important : en Java, une chaîne de caractères est un objet. Or tout objet est "surveillé" par le garbage collector pour savoir si oui ou non il peut être supprimé de la mémoire. Il doit en être de même pour les chaînes de caractères que vous renvoyez en la JVM. Encore une fois, les fonctions fournies par l'environnement JNI règlent le problème:

Notez une chose importante : d'après le prototype des fonctions C on peut retrouver le prototype des méthodes Java. En effet, le premier paramètre référence toujours l'environnement par lequel vous obtiendrez les fonctions du support JNI. Le second paramètre donne un complément d'information sur le type de la méthode : si ce paramètre est de type jclass nous avons alors à faire à une méthode statique, sinon (type jobject) nous avons une méthode normale (il faut un objet pour l'invoquer). Les autres paramètres sont en accord avec les paramètres de la méthode Java.

Diapositive précédente Diapositive suivante