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] Appel librairie Java depuis C++


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [JNI] Appel librairie Java depuis C++
    Bonjour,

    J'ai besoin d'aide pour appeler une librairie JAVA depuis du C++.

    Il me faut appeler cette librairie en donnant en arguments :
    - soit une image et des valeurs si c'est possible
    - soit un long string avec le chemin de l'image et les valeurs

    Côté JAVA, j'ai une fonction main qui gère tout. Que dois-je faire de plus pour préparer ? Comment dois-je compiler ?

    Côté C++, comment dois-je procéder pour faire mon appel ?

    Je trouve beaucoup de documentation pour appeler du C/C++ depuis JAVA mais pas l'inverse.

    Merci pour votre aide.

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Pourquoi ne pas utiliser un exec en C/C++ en invoquant javac, puis de même avec "java" pour lancer ton main.

    En gros quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(fork() == 0) 
    {
      if(fork() == 0) {
        execvp("javac", "Classe.java");
      }
      wait(NULL); // On attend que le 2ème fils compile
      execvp("java", "Classe"); // On lance le programme
    }
    wait(NULL); // On reprend l'exécution du processus principal quand on a tout fini
    En sachant qu'il faut mettre les bon paramètres dans les execvp. Cela te permettrait d'exécuter ton code depuis du C.

    Pour ce qui du passage de paramètres, tu les passes directement dans le second execvp, afin que ton main puisse les récupérer depuis le code C.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour la réponse.

    Autant je maîtrise la programmation JAVA, autant je ne connais rien en C++ même si les concepts sont les mêmes.

    Du coup, je ne sais pas quelle est la solution la plus rapide.

    Concrètement, il y un logiciel existant en C++ auquel je rajoute un plugin. Dans ce plugin, il y a une partie de traitement, c'est ma partie JAVA.

    Je suis désolé, je pars vraiment de loin et je ne comprends rien du tout.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Points : 968
    Points
    968
    Par défaut
    Il y a la fonction CallObjectMethod dans JNI qui permet d'appeler une méthode d'objet Java depuis C++. Par contre, JNI peut être difficile a maîtriser si tu ne connais pas trop le C++, en particulier pour tout ce qui est de la gestion de la mémoire.
    Si tu te sens d'attaque, ce lien montre comment gérer la communication Java vers C++ et C++ vers Java: http://stackoverflow.com/questions/5...m-c-in-android

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci Math_lab, je vais essayer de m'en sortir avec ces infos.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'ai bien avancé.

    La classe est trouvée, la méthode aussi mais le retour est null...

    Le problème peut-il venir du fait que ma méthoe en appelle d'autres ?...

    Si oui, dois-je en conclure qu'avec JNI on ne peut appeler une et une seule méthode ?

    Merci de votre réponse.

  7. #7
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Pourrais-tu montrer ton code stp.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'ai identifié le problème : un fichier properties qui n'était pas chargé.

Discussions similaires

  1. JNI -> Appeler méthode Java depuis C++ qui instancie un objet
    Par MilWolf dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 07/02/2015, 12h36
  2. Appel méthode java depuis javascript
    Par Dragna_x dans le forum Wicket
    Réponses: 2
    Dernier message: 24/06/2011, 14h35
  3. [JNI] appel méthode Java (superclasse ?)
    Par gassi64 dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 17/06/2009, 15h09
  4. Appel API JAVA depuis VB
    Par vince29 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/04/2008, 10h23
  5. [XSLT] [JAVA] Appeler fonction java depuis XSL
    Par greg_one dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 30/05/2007, 22h11

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