IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

JNI NDK jintArray ?


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Par défaut JNI NDK jintArray ?
    Bonjour, j'aimerai pouvoir passer deux int depuis du code c++ vers du Java.
    Vu que passer des jint*, ça n'a pas l'air de marcher (?), j'aimerai créer une structure Point qui a deux Int et donc retourner un Point.
    (Quelque chose comme ça : )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    JNIEXPORT t_vector2 JNICALL Java_com_package1_mainActivity_giveVector
    (JNIEnv* env, jobject j)
    t_vector2 res;
    res.i1 = param1;
    res.i2 = param2;
    return res;
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int param1 = 11;
    int param2 = 30;
    typedef struct
    {
      int i1;
      int i2;
    }t_vector2;
    Problème : ça compile bien coté c++, mais comment récupérer un t_vector2 côté Java?
    (c'est possible que la méthode soit complètement fausse, et que même le petit bout de code donné au dessus ne soit pas la bonne façon de faire).
    Objectif : récupérer 11 et 30 côté Java.

    Merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Par défaut
    J'ai trouvé ceci:
    http://stackoverflow.com/questions/1...om-jni-to-java
    Mais j'ai testé de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    JNIEXPORT jintArray JNICALL Java_com_package1_mainActivity_giveVector
    (JNIEnv* env, jclass jcl)
    {
    	jintArray res;
    	res = (*env)->NewIntArray(env,2);
    	if (res == NULL)
    	{
    		return NULL;
    	}
    	jint test[2];
    	test[0] = t11;
    	test[1] = t12;
     
    	(*env)->setIntArrayRegion(env, res, 0, 2, test);
    	return res;
     
    }
    Mais ça ne marche pas :
    je reçois ça comme erreur à la compilation :
    error: base operand of '->' has non-pointer type '_JNIEnv'
    Merci d'avance si quelqu'un a la réponse

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Par défaut
    Trouvé
    Alors si un jour quelqu'un a besoin de faire ça :

    coté cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    int t11 = 15;
    int t12 = 12;
    JNIEXPORT jintArray JNICALL Java_com_package1_mainActivity_giveArrayToJava
    (JNIEnv* env, jobject jobj)
    {
    	jintArray res;
            // la taille donnée dans NewIntArray est la taille de la liste désirée.
    	res = (jintArray) (env)->NewIntArray(2);
     
            // secure test
    	if (res == NULL)
    	{
    		return NULL;
    	}
    	jint test[2];
    	test[0] = t11;
    	test[1] = t12;
     
    	env->SetIntArrayRegion((jintArray)res, 0, 2, test);
    	return res;
    }
    Coté Java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public native int[] giveArrayToJava();
     
    // dans une classe ...
    public void testDisplay()
    {
        int i[2] = new int[2];
        i = giveArrayToJava();
        Log.i("mainActivity", "i[0] = " + i[0] + "i[1] = " + i[1]);
    }
    et hop, on récupère i[0] = 15 et i[1] = 12

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JNI]dll java
    Par icepower dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 03/09/2009, 14h53
  2. [JNI]appel d'un dll en Java
    Par Aida dans le forum Entrée/Sortie
    Réponses: 22
    Dernier message: 23/01/2008, 16h19
  3. [ JNI ] [ plug-in ] generateur d'en-tete *.h
    Par akira_le_gaucher dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 20/04/2004, 17h18
  4. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28
  5. [Débutant][JNI]Erreur de chargement de dll
    Par Agifem dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 24/04/2003, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo