- 1 -

    II. Possibilités offertes par le JNI


      1. Accéder à des chaînes de caractères Java



La JNI accorde une place importante au type String en fournissant un ensemble de fonctions de manipulation au sein du code natif. Les méthodes se répartissent en 3 catégories qui sont :

  • la création de String ;
  • la conversion de String ;
  • le dimensionnement de String.

C’est l'argument JNIEnv env qui est utilisé pour accéder à une String Java. Les String Java sont au format Unicode UTF-8 alors que la plupart des langages informatiques se basent sur le format ASCII ou Latin-1. Donc si on reçoit une String et qu'on veut la passer à une fonction non-Unicode (printf( ), par exemple), il faut d'abord la convertir en caractères ASCII avec la fonction JNI GetStringUTFChars( ). Cette fonction prend une String Java et la convertit en caractères UTF-8 (ceux-ci font 8 bits pour contenir de valeurs ASCII ou 16 bits pour contenir de l'Unicode ; si la chaîne d'origine est en ASCII, la chaîne résultante l'est aussi).

Exemple : Partie native recevant une String
#include <stdio.h>

#include "ShowMessage.h"

extern "C" JNIEXPORT void JNICALL Java_ShowMessage_ShowMessage(JNIEnv* env, jobject, jstring jMsg) { const char* msg=env->GetStringUTFChars(jMsg,0);
printf("Thinking in Java, JNI: %s\n", msg);
env->ReleaseStringUTFChars(jMsg, msg); }

Cet extrait de programme nous permet d’illustrer l’utilisation des fonctions principales GetStringUTFChars() et ReleaseStringUTFChars(), rattachées aux jstring.



Rédigé par Cyril MOQUEREAU