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] Conserver une référence sur plusieurs appels de méthode


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut [JNI] Conserver une référence sur plusieurs appels de méthode
    Bonjour
    J'ai un problème concernant l'utilisation d'une librairie C++ dans une appli ecrite en java en utilisant JNI. Voila ce que j'aimerais faire:

    J'ai une dll (ecrite en C++) et les headers correspondant. Je voudrais pouvoir instancier un objet de cette librairie une et une seule fois dans mon programme java (via du code natif donc) et pouvoir utiliser les methodes relatives a cet objet (donc sans devoir instancier un nouvel objet dans le code natif). C'est a dire que j'aurais 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
     
    public class Maclasse{
        public static native void methodePourInstancier(des parametres pour instancier);
        public static native type_de_retour uneMethodeUtilisantLObjetInstancie(...);
        public static native void UneAutreMethodeUtilisantLObjetInstancie(..);
      /*
       d'autres methodes...
      */
    public static void main(String args[]){
      Maclasse.methodePourInstancier();
      Maclasse.uneMethodeUtilisantLObjetInstancie(...);
    ...
    }
    }
    Donc pour résumer comment faire pour que la référence de l'objet créer par la premiere méthode ne soit pas perdue après l'appel?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Si tout est statique tu peux utiliser simplement utiliser un objet static dans ton code natif.

    Sinon il faut utiliser l'allocation dynamique et passer le pointeur du code natif vers Java et inversement (sous forme d'un long).

    a++

  3. #3
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    Si t'avais juste un ptit exemple avec l'alloc dynamique (je pense plutot m'orienter la dessus ca colle mieux avec ce que je veux faire finalement) j'avoue ne jamais avoir utilisé la JNI donc jsuis pa encore tres a l'aise avec ca. Tu veux dire que j'aurais 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
    15
    16
     
    //code java
    ...
    public native  long methodPourInstancier(...);
    public native void uneMethode(...,long reference);
    //code C++
    /*
    ici les includes necessaires
    */
    JNIEXPORT jlong JNICALL Java_Maclasse_methodePourInstancier
    (JNIEnv *env, jobject obj, ....)
    {
      CppObject_t myCppObject = create_new_object(...);
      jlong ref = &myCppObject;
      return ref;
    }
    Et je dois passer la valeur de retour (donc ref) comme argument des autres méthodes ?

    C'est ce que j'ai compris mais j'ai ptre rien pigé.. De plus j'avoue être une quiche en C++ etant donné que j'ai jamais vraiment codé dans ce langage.

  4. #4
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    J'ai oublié de te remercier pour ton indication néanmoins. Donc merci.

  5. #5
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut J'écris de la merde des fois
    Il faut lire
    CppObject_t myCppObject;
    create_new_object(...,myCppObject);

    en supposant que create_new_object fait ce qu'il faut..

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par KindPlayer Voir le message
    Et je dois passer la valeur de retour (donc ref) comme argument des autres méthodes ?
    Oui grosso-modo ce serait ça.
    A ne pas oublier également une méthode de destruction de l'objet...

    Citation Envoyé par KindPlayer Voir le message
    Il faut lire
    CppObject_t myCppObject;
    create_new_object(...,myCppObject);

    en supposant que create_new_object fait ce qu'il faut..
    Mon C++ est un peu (beaucoup) rouillé donc je ne pourrais pas t'aider d'avantage


    a++

Discussions similaires

  1. Conserver une variable sur plusieurs pages
    Par orleans dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2008, 17h44
  2. Comment avoir une référence sur une Vue
    Par Philippe299 dans le forum MFC
    Réponses: 1
    Dernier message: 12/08/2005, 10h03
  3. [Struts]Affiche d'une liste sur plusieurs pages
    Par guillaume_85 dans le forum Struts 1
    Réponses: 3
    Dernier message: 24/06/2005, 20h23
  4. Réponses: 4
    Dernier message: 03/12/2004, 11h18
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23

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