JNI

Résolu/Fermé
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 3 sept. 2006 à 19:52
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 - 4 sept. 2006 à 01:09
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

scaryman Messages postés 492 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 16 mai 2007 12
3 sept. 2006 à 20:33
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++
3
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
3 sept. 2006 à 23:22
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
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
3 sept. 2006 à 22:14
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 ...
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
4 sept. 2006 à 00:05
Salut :

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

Merci Tous ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
4 sept. 2006 à 01:09
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
0
Rejoignez-nous