JNI

Résolu/Fermé
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
-
Messages postés
5367
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
27 janvier 2022
-
Salut :

Je travaille avec JNI, j'ai une méthode native :

en Java :
public native int method (int n);

en C/C++ :
JNIEXPORT jint JNCALL Java_myClass_method
(JNIEnv * env, jobject instance, jint n);

comment puisse-je dans l'implémentation en langage C/C++ récupérer ce paramètre d'entrée de type jint ?

puis en fin de la méthode comment je peux retourner un jint ?

En autres termes comment faire la conversion d'un int vers jint et vis vers ça? 

                             (int <--> jint)  ?
(Les couleurs montrent exactement les types que je suis en train de discuter)

5 réponses

Messages postés
492
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
16 mai 2007
12
Salut
Le int étant un type primitif, le fichier de définition jni.h le gère directement et donc le compilateur C peut utiliser ceux-ci comme des int traditionnels.

A++
Messages postés
5367
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
27 janvier 2022
111
Salut,

regarde dans la doc JNI de sun il y a le tableau d'équivalence

sinon tout les type primitif à l'exception de jboolean sont plus ou moins equivalent en jni avec les type du C/C++

mais bon je te colle le tableau

boolean

,
jboolean

, unsigned 8 bits
, ----
byte

,
jbyte

, signed 8 bits
, ----
char

,
jchar

, unsigned 16 bits
, ----
short

,
jshort

, signed 16 bits
, ----
int

,
jint

, signed 32 bits
, ----
long

,
jlong

, signed 64 bits
, ----
float

,
jfloat

, 32 bits
, ----
double

,
jdouble

, 64 bits

pour le int le seul cas ou il fait 2 octets c'est sur une archi 16bits sinon il fait 4 octets.

pour completer tu peut faire

jint ji1 = 10;
int ci = ji1;
jint ji2 = ci;

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

Voici ce que je veux savoir :

JNIEXPORT   jint  JNCALL Java_myClass_method
(JNIEnv * env, jobject instance, jint n)
{
         int entier = n; // est ce que cela est valide sinon comment faire ?
                                // comment récupérer la valeur de n pour l'affectée à entier
         // ....
         int retour = ...;
         //...
         return retour;// est ce que cela est valide sinon comment faire ?
                                // un int en C est sur 2 octets 
                                // un int en Java est sur 4 octets
}

Et Merci ...
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

On peut donc confondre les types primitifs du C/C++ avec ceux de JNI.

Merci Tous ...
Messages postés
5367
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
27 janvier 2022
111
Salut,

pour finaliser ta question voici ce qui et fait dans jni_md.h et jni.h

typedef int jint;
#ifdef _LP64 /* 64-bit Solaris */
typedef long jlong;
#else
typedef long long jlong;
#endif

typedef unsigned char    jboolean;
typedef unsigned short    jchar;
typedef short        jshort;
typedef float        jfloat;
typedef double        jdouble;

/*
 * jboolean constants
 */

#define JNI_FALSE 0
#define JNI_TRUE 1

donc comme tu peut le voir c'est la meme chose sauf pour les char qui en java sont codé sur 2 octets (pour le support de l'unicode) contrairement au C/C++ ou un char et codé sur 1octet c'est donc pour cela que jchar vaut un short

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA