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

C++ Discussion :

Transmission d'un tableau


Sujet :

C++

  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut Transmission d'un tableau
    Bonjour

    Voici mon problème. J'utilise JNI pour utiliser les ressources d'une librairie C++ avec un code Java. L'implémentation semble bien marcher a une exception près. Voici mon code Java (ne criez pas au scandale !) :
    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
     
    public class Main {
     
    	/*The link between our Java program and our library*/
    	private native void getLine(int nb, String []prompt);
     
    	public static void main(String[] args) {
    		Main m = new Main();
    		/*How many arguments we have ?*/
    		int argv = args.length;
    		/*Sending to the library the arguments number and the arguments themselves*/
    		m.getLine(argv, args);
    	}
     
    	/*Loading the library libPCR.so in our $LD_LIBRARY_PATH*/
    	static {
            System.loadLibrary("PCR");
        }
     
    }
    Et le fichier C++ appelé :
    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
     
    #include "FindPrimers.h"
    #include "Main.h"
     
    JNIEXPORT void JNICALL Java_Main_getLine (JNIEnv *env, jobject object, jint a, jobjectArray string) {
    		//std::cout << "Arguments passés" << std::endl;
    		//std::cout << a << std::endl;
    		const char *args[a];
    		for (int i=0; i<a; i++){
    			jstring jstr = (jstring)env->GetObjectArrayElement(string, i);
    			const char *c = env->GetStringUTFChars(jstr, 0);
    			//std::cout << c << std::endl;
    			args[i] = c;
    			env->ReleaseStringUTFChars(jstr, c);
    		}
    		FindPrimers(a, args);
    		return;
    }
    Vous pouvez voir des cout mis en commentaires : ces tests m'ont affiché ce que j'attendais, donc cette partie est correcte. Ce qui ne va pas, c'est l'appel de la méthode FindPrimers. Voici un code minimal de FindPrimers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void FindPrimers(int nb, const char *words[]){
    	TSetSeq SetSeq,TheoSeq;
      	TScoMat ScoMat;
      	std::cout << "Arguments passés :" << std::endl;
      	std::cout << nb << std::endl;
      	for (int i=0; i<2; i++) {
      		std::cout << words[i] << std::endl;	
      	}
    }
    A l'affichage, nb est bien affiché mais je n'ai rien dans mon tableau words. Je suppose que j'ai dû mal transmettre ce paramètre.
    Où est donc mon erreur ?
    Merci d'avance de vos réponses et excusez encore cette incursion d'un Perlien-Javaiste chez vous.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Mon JNI est un peu rouillé, mais es-tu sûr de la justesse du bloc suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const char *c = env->GetStringUTFChars(jstr, 0);
    args[i] = c;
    env->ReleaseStringUTFChars(jstr, c);
    Ce que tu copies dans args[i], c'est l'adresse du premier élément de la chaine de caractère.
    Quand tu fais un ReleaseString sur cette même adresse, il est fort possible que cette chaîne soit supprimée.
    Quand ensuite tu essaies d'accéder à cette chaine dans FindPrimers, elle n'existe plus.
    Elle ne peut donc pas être affichée.

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    C'est exact, l'erreur venait de là. Merci pour le tuyau et rassures-toi, tu as de bons restes en JNI

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. Transmission d'un tableau
    Par aurelie689 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 20/05/2009, 12h58
  2. Transmission d'un Tableau a une fonction
    Par 19cmos83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/09/2008, 11h01
  3. problème de transmission d'un tableau à une variable
    Par Bobtilt dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/07/2008, 12h09
  4. Transmission d'un tableau de Flash à PHP
    Par abdoums dans le forum Flash
    Réponses: 3
    Dernier message: 27/07/2007, 15h59
  5. Transmission de tableau
    Par MegaNam dans le forum Fortran
    Réponses: 1
    Dernier message: 03/04/2007, 10h35

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