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

Usine Logicielle Discussion :

Comprendre fonctionnement logiciel C++ / Java à partir des sources


Sujet :

Usine Logicielle

  1. #1
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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)

Discussions similaires

  1. Installer un logiciel, kino, à partir des sources
    Par bymabrouk dans le forum SUSE
    Réponses: 1
    Dernier message: 03/02/2008, 18h00
  2. Réponses: 2
    Dernier message: 30/06/2006, 14h25
  3. [Tomcat]Lancer tomcat dans l'IDE à partir des sources.
    Par goony dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 09/03/2006, 14h44
  4. [UML] Générer un diagramme de classe à partir des sources
    Par ekard dans le forum EDI et Outils pour Java
    Réponses: 5
    Dernier message: 18/01/2006, 17h13

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