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] Retourner un tableau de String via JNI


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut [JNI] Retourner un tableau de String via JNI
    Bonjour,

    Je débute avec JNI et j'ai un petit problème.
    Je teste pour l'instant la manière de récupérer des types de données "simples", codés en dur.
    Et je n'arrive pas à savoir comment renvoyer un tableau de chaîne de caractères.

    Quelqu'un aurait-il une idée de la marche à suivre?
    Voici le proto de ma fonction C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    JNIEXPORT jobjectArray JNICALL Java_LibraryInterface_getParameters
      (JNIEnv * env, jobject, jint id)
    {
         // doit retourner par exemple ["toto", "tata", "titi"]
    }
    Merci d'avance!

  2. #2
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Par défaut
    Salut seiryujay,

    J'avais fait une interface JNI il y a quelques année, et je ne me souviens pas vraiment comment ça fonctionne mais voici un bout de code qui renvoie un tableau de double si ça peut te servir

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    	JNIEXPORT jdoubleArray JNICALL Java_GetPosition (JNIEnv * env, jobject obj){
     
    		int Vector64_Length = 3;
    		jdoubleArray jPosition = NULL; //Tabla que almacena las posiciones Java type
    		jdouble *Pos;	//Vector position
    		C_Vectors64 *position;	//Vector Position C++ type
    		C_Trajectory_Segment s = C_Trajectory_Segment(7);//Final
     
    		position = Get_Position (s);
     
    		if (Tratar_Excepcion() == -1) { 
    			jclass newExceptionCls = env->FindClass("java/lang/IllegalArgumentException");
    			env->ThrowNew(newExceptionCls, String_Excepcion);
    			delete[](position);
    			return jPosition;
    		}
    		else {
    			Status_IO_Write(Result_Index[0], String_Resultado);
    			Status_Clear(Result_Index[0]);
    		}
     
    		//Crea una tabla de double tipo java
    		jPosition = env->NewDoubleArray(Vector64_Length);
     
    		//Saca los elementos de la tabla
    		Pos = env->GetDoubleArrayElements(jPosition, 0);
     
    		//initializa los valores de la tabla java con el vector velocidad devuelto
    		for (int i=0; i<Vector64_Length; i++) {
    			Pos[i] = *position[i];
    		}
    		//Libera memoria
    		delete[](position);
    		env->ReleaseDoubleArrayElements(jPosition, Pos, 0);
     
    		return jPosition;
     
    	}
    a+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Par défaut
    j imagine que tu es alle voir, mais on sait jamais, sur le site de sun il y a un super bouquin (telechargeable en ligne) sur l utilisation de JNI qui est tres bien fait!
    Je l avais utilise l annee derniere pour faire de l interfacage de libraries fortran a java en passant par C. Il s agissaient de libraries mathematiques donc pas de String, mais tu peux toujours regarder ...

    http://java.sun.com/docs/books/jni/download/jni.pdf

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Merci pour la doc!

    Je l'ai regardé un peu, et je me pose quelques questions sur l'utilisation des méthodes Release...Array.
    Quand doit-on les appeler?
    Quel est leur rôle réél?

    Quand je veux retourner une chaîne de caractères, je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char* channelType = "channelType???";
    return env->NewStringUTF(channelType);
    Est-ce que je dois utiliser les méthodes Release dans ce cas-là?

    Pour ce qui est du tableau de chaînes de caractères, j'ai codé un truc, mais je ne peux pas le tester encore :
    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
     
    JNIEXPORT jobjectArray JNICALL Java_LibraryInterface_getParameters
      (JNIEnv * env, jobject, jint channelId)
    {
    	const int tabSize = 9;
    	char* strTab[tabSize];
     
    	strTab[1] = "1";
    	strTab[2] = "2";
    	strTab[3] = "3";
    	strTab[4] = "4";
    	strTab[5] = "5";
    	strTab[6] = "6";
    	strTab[7] = "7";
    	strTab[8] = "8";
    	strTab[9] = "9";
     
    	jstring jstr = env->NewStringUTF(strTab[1]);
     
    	return env->NewObjectArray(2, env->FindClass("java/lang/String"), jstr);
    }
    Si vous pensez que c'est incorrect, n'hésitez pas.
    Sinon, je vous dirai si ça marche une fois que j'aurai "interfacé" ma dll...

    Merci du coup de main en tout cas!

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Je vais faire quelque chose de très très mal mais puisque ce post parle aussi de JNI, j'en profite pour vous aiguiller sur un 2ème problème que j'ai actuellement.
    C'est ici...

    PS : je me punirai plus tard pour ce sacrilège

Discussions similaires

  1. Retourner un tableau de string
    Par Fred0 dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/04/2010, 19h02
  2. [JNI] création d'un tableau de Strings
    Par myryad dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/04/2008, 11h51
  3. Réponses: 4
    Dernier message: 21/04/2007, 20h02
  4. [JNI] Tableau de String => Problème
    Par Hikage dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 03/07/2006, 17h06
  5. [JNI] utiliser du code DOT NET via JNI, possible ?
    Par Elbarto dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 14/06/2006, 17h41

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