Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 1
    Points
    1

    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
    Expert Confirmé
    Avatar de olivier.pitton
    Homme Profil pro olivier pitton
    Étudiant
    Inscrit en
    juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Nom : Homme olivier pitton
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2012
    Messages : 355
    Points : 2 638
    Points
    2 638

    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 :
    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
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 1
    Points
    1

    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 chevronné
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    avril 2008
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : avril 2008
    Messages : 359
    Points : 645
    Points
    645

    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
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 1
    Points
    1

    Par défaut

    Merci Math_lab, je vais essayer de m'en sortir avec ces infos.

  6. #6
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 1
    Points
    1

    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
    Expert Confirmé
    Avatar de olivier.pitton
    Homme Profil pro olivier pitton
    Étudiant
    Inscrit en
    juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Nom : Homme olivier pitton
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2012
    Messages : 355
    Points : 2 638
    Points
    2 638

    Par défaut

    Pourrais-tu montrer ton code stp.

  8. #8
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 1
    Points
    1

    Par défaut

    Bonjour,

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •