|
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.

|