Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Invité de passage
    Femme Profil pro
    mécatronique
    Inscrit en
    mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mars 2012
    Messages : 7
    Points : 0
    Points
    0

    Par défaut Comprendre fonctionnement logiciel C++ / Java à partir des sources

    Bonjour,

    J'aurai besoin de votre aide SVP !
    Je suis en stage et je dois corriger des erreurs sur un logiciel à partir des sources. Sauf que les programmes ne sont pas commentés et pas d'architecture ni de cahier de développement du logiciel. Pourriez-vous m'indiquer une démarche pour comprendre l'architecture générale afin de compiler l'ensemble.

    Merci d'avance de votre aide.

    Je suis à votre disposition pour tout renseignement qui vous permettra de mieux saisir ma problématique.

    Cordialement

  2. #2
    Membre chevronné
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2009
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mars 2009
    Messages : 424
    Points : 757
    Points
    757

    Par défaut

    Bonjour,

    Ton logiciel est programmé dans quel langage? C'est quoi? Une application web, un programme windows avec interface graphique? Un élément d'une chaîne de traitement?...

  3. #3
    Invité de passage
    Femme Profil pro
    mécatronique
    Inscrit en
    mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mars 2012
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    en fait c'est un logiciel de gestion de suspension mécanique, il est composé de deux parties une partie moteur de calcul programmé en C++ et une partie interface graphique développé en Java. le DLL pour le moteur de calcul a été généré mais j'aimerai d'abord recompiler le tout, mais avant comprendre son architecture.

  4. #4
    Membre chevronné
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2009
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mars 2009
    Messages : 424
    Points : 757
    Points
    757

    Par défaut

    Re,

    Tu as peut-être une communication entre JAVA et C++ reposant sur une JNI (ta dll). Tu vois des "native" dans les classes java?

    Pour l'aider à décortiquer le moteur de rendu, tu peux générer la documentation automatique du code à l'aide de Doxygen. Si le moteur repose sur des classes, tu verras peut-être sortir les grandes lignes. Idem pour la javadoc de l'interface graphique.

    Sinon, tu peux partir des appels JAVA->C++ pour repérer la partie "haute" du moteur de calcul. A partir de cette interface entre java et c++, tu peux descendre dans le cœur du moteur de calcul, repérer les différents composants et les différents appels (prépare ton criterium, tu risques de gribouiller).

    Pour ce qui est de la compilation du moteur de rendu, ça dépend des techniques utilisées (projet spécifique à un IDE, configure/make, cmake, ou encore rien : tes collègues lancent les lignes de commande qui vont bien)...

  5. #5
    Invité de passage
    Femme Profil pro
    mécatronique
    Inscrit en
    mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mars 2012
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Re,

    J'ai essayé de faire ce que tu ma dis, mais l'instant j'ai des messages d'erreurs.
    La démarche que j'ai suivie est :

    - D'abord je crée un nouveau projet où j'importe tous les fichiers .java (partie interface graphique)

    - Ensuite j'importe une librairie mathématique (contenant des outils maths, ce sont des fichiers .cpp et .h)

    - Ensuite j'essaie de compiler mais ça ne marche pas, je sais peut être qu'il faudrait que j'importe le fichier (contenant la partie moteur de calcul) mais sauf que je ne sais pas comment procéder

    l'erreur que j'ai est du genre : utilisation de classes non définies dans le mes .java et donc il me propose de créer ces classes, sauf que je suis sûr qu'elles ont été créées.


    Merci de ton aide !

  6. #6
    Membre chevronné
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2009
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mars 2009
    Messages : 424
    Points : 757
    Points
    757

    Par défaut

    Bonjour,

    J'ai du mal à voir ce que tu fais au juste.

    Tu compiles bien tes .cpp et .h en JNI? Tu ne les ajoutes pas au projet java?

  7. #7
    Invité de passage
    Femme Profil pro
    mécatronique
    Inscrit en
    mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mars 2012
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    En gros je ne vois pas comment il faut faire le lien entre la partie moteur de calcul et la partie interface Java.

    Si tu pourrais me dire les étapes que je devrais suivre pour réussir à avoir un projet avec toutes les librairies et sources pour qu'il n y ait pas des erreurs de déclaration, ça me permettra de mieux comprendre.

    Pour cela je te mets ici l'ensemble des sources que j'ai :

    - un fichier contenant la partie "Develloppement" composé de :
    1. DataTool : Bibliothèque de lecture/écriture des fichier
    2. Tool : Bibliothèque de géométries utilisés
    3. OrgaTool : Bibliothèque de modèles d'organes
    4. Dev : moteur (ensemble des fichiers C++ et .h, récupération des données et transformation en java...), ensuite interface (l'ensemble des fichiers .java) et un fichier .bat

    - un fichier contenant un .dll, un .exp et un .lib

    - une librairie contenant MathTool (une bibliothèque mathématique) et une autre bibliothèque de base.

    Voilà tout ce dont j'ai et à partir de ça j'aimerai d'abord savoir une démarche pour arriver à compiler l'ensemble.


    Cordialement,

  8. #8
    Membre chevronné
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2009
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mars 2009
    Messages : 424
    Points : 757
    Points
    757

    Par défaut

    Citation Envoyé par parislorient Voir le message
    Bonjour,
    En gros je ne vois pas comment il faut faire le lien entre la partie moteur de calcul et la partie interface Java.
    Il existe plusieurs techniques pour faire communiquer du java et du C++, parmi lesquelles :
    - les JNI, écrites à la main
    - les JNI, dont le code est généré par SWIG
    - JNA (je ne connais pas)
    - Les sockets
    - Les fichiers d'échanges
    - ...

    Citation Envoyé par parislorient Voir le message
    Si tu pourrais me dire les étapes que je devrais suivre pour réussir à avoir un projet avec toutes les librairies et sources pour qu'il n y ait pas des erreurs de déclaration, ça me permettra de mieux comprendre.
    Justement, ça va dépendre des techniques, des compilateurs C++ utilisés... Je ne peux pas t'expliquer en détail toutes les chaînes de compilation, je te noierais probablement.

    Je t'avoue que j'ai du mal à voir ce qui est utilisé. Est-ce que tu as des erreurs de compilation en java ou en C++?


    Citation Envoyé par parislorient Voir le message
    Pour cela je te mets ici l'ensemble des sources que j'ai :

    - un fichier contenant la partie "Develloppement" composé de :
    1. DataTool : Bibliothèque de lecture/écriture des fichier
    2. Tool : Bibliothèque de géométries utilisés
    3. OrgaTool : Bibliothèque de modèles d'organes
    4. Dev : moteur (ensemble des fichiers C++ et .h, récupération des données et transformation en java...), ensuite interface (l'ensemble des fichiers .java) et un fichier .bat

    - un fichier contenant un .dll, un .exp et un .lib

    - une librairie contenant MathTool (une bibliothèque mathématique) et une autre bibliothèque de base.
    Je pense qu'il faut que tu essais dans cet ordre là :
    - Compiler les bibliothèques C++, avec un compilateur C++. Tu prendras ainsi en main la chaine de compilation C++.
    - Compiler le code de l'interface java (si la techno utilisée est JNI pour l'interfacage)
    - Compiler le code java, avec un compilateur java


    Essaye de me coller quelques erreurs de compilation que tu rencontres au pire que je me fasse une idée (les premières)...

    ++

  9. #9
    Invité de passage
    Femme Profil pro
    mécatronique
    Inscrit en
    mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mars 2012
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    Je suis pour l'instant à l'étape compilation moteur de calcul.

    J'utilise Visual C ++, j'ai créé un projet à partir de fichiers sources existant (mes .cpp et mes .h), ensuite j'ai rajouté à la CLASSPATH la librairie logiciel.dll, logiciel.lib et logiciel.exp.

    Mais ce que je ne comprends pas, c'est le compilateur m'indique des indique des message d'erreurs liés au fichiers header .h, il me dit qu'il ne l'ai trouve pas alors que je les ai rajouter à mon projet.

    Voici les erreurs que j'ai

    Error 1 error C1083: Cannot open include file: 'Vehicule.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Vehicule.cpp 7 1 testG
    Error 2 error C1083: Cannot open include file: 'Triangle.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Triangle.cpp 7 1 testG
    Error 3 error C1083: Cannot open include file: 'Transmission.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Transmission.cpp 7 1 testG
    Error 4 error C1083: Cannot open include file: 'Statique.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Statique.cpp 7 1 testG
    Error 5 error C1083: Cannot open include file: 'SolvSusp2.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\SolvSusp2.cpp 5 1 testG
    Error 6 error C1083: Cannot open include file: 'SolvSusp.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\SolvSusp.cpp 5 1 testG
    Error 7 error C1083: Cannot open include file: 'SolvFix.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\SolvFix.cpp 6 1 testG
    Error 8 error C1083: Cannot open include file: 'SolvCin.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\SolvCin.cpp 5 1 testG
    Error 9 error C1083: Cannot open include file: 'SensibGeom.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\SensibGeom.cpp 5 1 testG
    Error 10 error C1083: Cannot open include file: 'Roue.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Roue.cpp 7 1 testG
    Error 11 error C1083: Cannot open include file: 'Repere.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Repere.cpp 7 1 testG
    Error 12 error C1083: Cannot open include file: 'RepartFixation.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\RepartFixation.cpp 5 1 testG
    Error 13 error C1083: Cannot open include file: 'Reglages.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Reglages.cpp 5 1 testG
    Error 14 error C1083: Cannot open include file: 'RapGeom.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\RapGeom.cpp 7 1 testG
    Error 15 error C1083: Cannot open include file: 'Poussant.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Poussant.cpp 7 1 testG
    Error 16 error C1083: Cannot open include file: 'PneuMz.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\PneuMz.cpp 5 1 testG
    Error 17 error C1083: Cannot open include file: 'MateriauPli.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\MateriauPli.cpp 5 1 testG
    Error 18 error C1083: Cannot open include file: 'Materiau.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Materiau.cpp 5 1 testG
    Error 19 error C1083: Cannot open include file: 'Lvdt.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Lvdt.cpp 7 1 testG
    Error 20 error C1083: Cannot open include file: 'JEpure.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\JEpure.cpp 6 1 testG
    Error 21 error C1083: Cannot open include file: 'Geometrie.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Geometrie.cpp 7 1 testG
    Error 22 error C1083: Cannot open include file: 'Geolog.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Geolog.cpp 5 1 testG
    Error 23 error C1083: Cannot open include file: 'Epure.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Epure.cpp 7 1 testG
    Error 24 error C1083: Cannot open include file: 'DeformBras.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\DeformBras.cpp 5 1 testG
    Error 25 error C1083: Cannot open include file: 'Debattements.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Debattements.cpp 7 1 testG
    Error 26 error C1083: Cannot open include file: 'Conv.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Conv.cpp 5 1 testG
    Error 27 error C1083: Cannot open include file: 'Chassis.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Chassis.cpp 7 1 testG
    Error 28 error C1083: Cannot open include file: 'Central.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Central.cpp 5 1 testG
    Error 29 error C1083: Cannot open include file: 'CasEffort.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\CasEffort.cpp 7 1 testG
    Error 31 error C1083: Cannot open include file: 'BielTor.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\BielTor.cpp 7 1 testG
    Error 32 error C1083: Cannot open include file: 'BielPince.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\BielPince.cpp 5 1 testG
    Error 30 error C1083: Cannot open include file: 'Biellette.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Biellette.cpp 7 1 testG
    Error 33 error C1083: Cannot open include file: 'BielCen.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\BielCen.cpp 7 1 testG
    Error 34 error C1083: Cannot open include file: 'BielAnt.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\BielAnt.cpp 7 1 testG
    Error 35 error C1083: Cannot open include file: 'Basculeur.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Basculeur.cpp 7 1 testG
    Error 36 error C1083: Cannot open include file: 'BarTorsion.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\BarTorsion.cpp 6 1 testG
    Error 37 error C1083: Cannot open include file: 'Antiroulis.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Antiroulis.cpp 6 1 testG
    Error 38 error C1083: Cannot open include file: 'Amortisseur.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\Amortisseur.cpp 7 1 testG
    Error 39 error C1083: Cannot open include file: 'AmoLateral.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\AmoLateral.cpp 5 1 testG
    Error 40 error C1083: Cannot open include file: 'AmoCentral.h': No such file or directory C:\Users\serigne\Documents\Rapport de Stage 2012\geolog\AmoCentral.cpp 7 1 testG

  10. #10
    Membre chevronné
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2009
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mars 2009
    Messages : 424
    Points : 757
    Points
    757

    Par défaut

    Salut,

    Ok. Ca veut dire que tu n'as pas fournis les bons répertoires aux compilateurs, en l’occurrence, ceux des .h. Il cherche "Vehicule.h" dans une liste de répertoire système + utilisateur, là, il ne trouve pas de fichier dans les répertoires.

    Il faut que tu ajoutes le répertoire contenant "Vehicule.h" aux répertoires de recherche des headers en faisant :
    - clic droit sur le projet : Propriétés
    - Propriétés de configuration
    -- C/C++
    ---- Général
    ------ Autre répertoire d'include <= ajout de ton répertoire.

    Mais, honnêtement, c'est une erreur de grand débutant en C++. Si tu ne connais rien à la compilation C++, tu risques de ramer en t'attaquant directement à la compilation d'un gros projet...

    Je te conseillerais de commencer par des choses plus simple que ces gros projets.

    - Faire un programme en console (projet MaConsole)
    - Faire une lib avec une pauvre fonction (projet MaLib), dans la même solution
    - Ajouter un appel à la fonction de MaLib dans MaConsole

    Tu as personnes de physique pour t'aider avec ces bases là?

    ++

  11. #11
    Invité de passage
    Femme Profil pro
    mécatronique
    Inscrit en
    mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mars 2012
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    je reviens vous demander encore de l'aide SVP, j'ai des erreurs de compilation toujours, est ce que vous auriez une idée de ce que ça peut être, je ne comprends pas trop ce que cela veut dire.
    Merci d'avance.


    1>Main.obj : error LNK2019: unresolved external symbol "public: __thiscall PGPString::~PGPString(void)" (??1PGPString@@QAE@XZ) referenced in function __catch$_main$0

    1>Main.obj : error LNK2019: unresolved external symbol "public: __thiscall PGPString:GPString(class PGPString const &)" (??0PGPString@@QAE@ABV0@@Z) referenced in function _main

    1>Main.obj : error LNK2019: unresolved external symbol "public: __thiscall PGPString:GPString(char const *)" (??0PGPString@@QAE@PBD@Z) referenced in function _main

    1>Main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall DataGm::~DataGm(void)" (??1DataGm@@UAE@XZ) referenced in function _main

    1>Main.obj : error LNK2019: unresolved external symbol "public: __thiscall DataGm:ataGm(void)" (??0DataGm@@QAE@XZ) referenced in function _main

    1>Main.obj : error LNK2019: unresolved external symbol "public: class PGPString & __thiscall PGPString::operator=(char const *)" (??4PGPString@@QAEAAV0@PBD@Z) referenced in function _main
    1>.\..\nomLogiciel\Debug/Test.exe : fatal error LNK1120: 6 unresolved externals

  12. #12
    Membre chevronné
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2009
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mars 2009
    Messages : 424
    Points : 757
    Points
    757

    Par défaut

    Bonjour,

    Bien, tu en es aux erreurs de link (error LNK*), tu tiens le bon bout. Si la classe PGPString est dans une autre bibliothèque, il manque le link sur cette bibliothèque.

    Si tes différents projets sont dans la même solution, tu dois ajouter une dépendance entre les projets.

    Clic droit sur le projet posant problème, "dépendances du projet" et coche le projet contenant PGPString.

  13. #13
    Invité de passage
    Femme Profil pro
    mécatronique
    Inscrit en
    mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mars 2012
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    Merci encore de votre aide, la compilation est bonne maintenant. J'ai ainsi obtenu trois fichiers (nomLogiciel.exp, nomLogiciel.lib et nomLogiciel.dll).

    J'aurais certainement encore d'un coup de main, j'ai pu comprendre réellement que le logiciel lui-même est écrit en Java et qu'il fait juste appel à la librairie créée avant.


    Pourriez-vous m'indiquer comment cet appel peut se faire (quel librairie dois-je importer, j'imagine que le chargement se fait avec Load.Library(), mais je comprends pas trop).

    Merci

  14. #14
    Membre chevronné
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2009
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mars 2009
    Messages : 424
    Points : 757
    Points
    757

    Par défaut

    Bonsoir,

    Alors, en bref, tu as une classe Java avec une fonction native "beep" qui appel une fonction C

    monpackage.Beeper
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    package monpackage;
    
    public class Beeper {
    	
    	public native void beep( int frequency, int duration );
    	
    }
    Tu passes un coup de javah là dessus, ça te fournit une fonction à implémenter en C/C++.

    monpackage_Beeper.h
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class monpackage_Beeper */
    
    #ifndef _Included_monpackage_Beeper
    #define _Included_monpackage_Beeper
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     monpackage_Beeper
     * Method:    beep
     * Signature: (II)V
     */
    JNIEXPORT void JNICALL Java_monpackage_Beeper_beep
      (JNIEnv *, jobject, jint, jint);
    
    #ifdef __cplusplus
    }
    #endif
    #endif

    Tu implémentes Java_monpackage_Beeper_beep dans un cpp :

    monpackage_Beeper.cpp
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "monpackage_Beeper.h"
    
    #include <windows.h>
    
    JNIEXPORT void JNICALL Java_monpackage_Beeper_beep
      (JNIEnv *, jobject, jint f, jint t)
    {
    	Beep(f,t);
    }
    Tu compiles le CPP en monpackage.dll (avec MinGW, ça donne ça), tu trouveras l'équivalent pour visual sur le net.

    Code :
    gcc -Wall -Wl,--kill-at -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o monpackage.dll monpackage_Beeper.cpp
    Maintenant, pour tester ta JNI (c'est là le loadLibrary), tu ajoutes :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    monpackage.BeepTest
    package monpackage;
    
    public class BeeperTest {
    	
    	static {
    		try{
    			//chargement de la DLL, si
    			System.loadLibrary("monpackage");
    		}catch( Exception e ){
    			System.err.println("impossible de charger monpackage.dll (recherche dans PATH et execution)");
    			e.printStackTrace();
    		}
    	}
    	
    	
    	public static void main( String argv[] ){
    		Beeper beeper = new Beeper();
    		beeper.beep(440,500);
    	}
    }
    Tu exécutes et tu devrais entendre un "beau" LA! (si tu es chanceux).

    Attention :
    - La DLL doit pouvoir être chargée (PATH ou répertoire d'exécution), sinon, erreur de chargement du module
    - Les options de compilation doivent être les bonnes, sinon, unsatisfied link error (il charge la DLL, mais ne trouve pas la fonction qui n'a pas le nom attendu dans la DLL)

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
  •