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

Entrée/Sortie Java Discussion :

[JNI] passage d'un tableau à 2 dimensions à une méthod nativ


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti Avatar de mmathieu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Points : 318
    Points
    318
    Par défaut [JNI] passage d'un tableau à 2 dimensions à une méthod nativ
    Bonjour à tous,
    j'espère que ma question n'est pas trop absurde , mais j'avoue crocher sur ce problème:

    Je désire transmettre à une procédure écrite en C/C++ un tableau à 2 dimensions créer depuis un programme Java via la JNI. Pour les tableaux à une dimension cela ne pose aucun problème, car dans <jni.h> le type jintArray existe, mais avec un tableau à 2 dimensions, on recoit un objet de type jobjectArray et je n'arrive pas l'exploiter...

    Merci d'avance!

  2. #2
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    je pense que le jobjectarray[i] est un jintarray si mes souvenirs sont bons...

  3. #3
    Membre averti Avatar de mmathieu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Points : 318
    Points
    318
    Par défaut
    est-il possible d'avoir un exemple d'utilisation, car j'avais déjà exploré cette voie, mais il y a un problème, car la taille du jobjectArray[i] est inconnue...

  4. #4
    Membre averti Avatar de mmathieu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Points : 318
    Points
    318
    Par défaut
    refresh

  5. #5
    Membre averti Avatar de mmathieu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Points : 318
    Points
    318
    Par défaut
    ma question n'était pas si abusrde...

  6. #6
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Salut,
    Il te suffit dé récupérer chaque item de ton jobjectArray comme un jintArray. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
         jobjectArray joa = ...; 
        jsize len1 = (jsize)env->GetArrayLength(joa);
     
        for (int i=0; i<len1; i++) {
            jintArray colonne = (jintArray)env->GetObjectArrayElement(joa, i);
            jsize len2 = (jsize)env->GetArrayLength(colonne);
            jint *element = env->GetIntArrayElements(colonne, 0);
            for(int j=0; j<len2; j++){
                  jint res = element[j];
                  //traitement avec le jint
            }
             //libération des tableaux
        }
    Bonne chance.
    @+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    salut,

    si l'on desire retourner ce meme tableau apres modifications ou traitement on fait return quoi?
    je veux dire return env-> ?
    quel type ?

    merci

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    salut!
    quelqu'una une idee svp !!

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 196
    Points : 106
    Points
    106
    Par défaut
    Je relance le sujet vu que j'ai sensiblement le même problème. J'ai une méthode native java qui passe en paramètre un int[][] et qui rend int[][] (ie le C++ le modifie en retourne la copie modifiée)

    Au niveau du code, après X essai j'ai capitulé sur ceci ;

    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
    23
    24
    25
    26
    27
    28
     
    void matriceCtJ(JNIEnv* env, int matC[9][9], jobjectArray joa){					
    	for (int lg=0 ; lg<9 ; lg++) {
    		jintArray ligne = env->NewIntArray(9);
    		ligne = (jintArray)env->GetObjectArrayElement(joa,lg);
    		env->SetIntArrayRegion(ligne, 0, 8, (jint*)matC[lg]);
    		env->SetObjectArrayElement(joa, lg, ligne);
    	}
    }
     
    JNIEXPORT jobjectArray JNICALL Java_sudoku_Facade_getSolution
    (JNIEnv* env, jclass, jobjectArray matriceCourante){		
    	//0. variables locales
    		int matriceCalcul[9][9];
    		jintArray colonne = (jintArray)env->NewIntArray(9);
    		jobjectArray matriceSolution = (jobjectArray)env->NewObjectArray(9, env->GetObjectClass(colonne), NULL);
     
    	//1. transformation matrice java en matrice C++
    		matriceJtC(env, matriceCourante, matriceCalcul);
     
    	//2. modifications de la matrice	
     
    	//3. transformation matrice C++ en matrice java
    		matriceCtJ(env, matriceCalcul, matriceSolution);
     
    	//4. retour
    		return matriceSolution;
    }
    Ca plante à l'exécution sur la 5éme ligne de matriceCtJ, le SetIntArrayRegion par un EXCEPTION_ACCESS_VIOLATION. Je commence a bien désespérer la...

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/08/2010, 09h27
  2. passage tableau 2 dimensions à une fonction
    Par zentaf dans le forum C++
    Réponses: 4
    Dernier message: 11/01/2010, 02h36
  3. Réponses: 6
    Dernier message: 28/12/2009, 17h45
  4. Réponses: 1
    Dernier message: 18/11/2005, 12h38
  5. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 15h50

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