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 :

Accès dll depuis java avec JNI


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 83
    Points
    83
    Par défaut Accès dll depuis java avec JNI
    Bonjour,

    j'aimerais pouvoir lancer des fonctions d'une dll depuis un programme java. Je commence donc en douceur avec un simple helloworld mais celui-ci ne marche pas. Le message d'erreur que je recois est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java.lang.UnsatisfiedLinkError: no Synchro in java.library.path
    	at java.lang.ClassLoader.loadLibrary(Unknown Source)
    	at java.lang.Runtime.loadLibrary0(Unknown Source)
    	at java.lang.System.loadLibrary(Unknown Source)
    	at inter.HelloWorld.<clinit>(HelloWorld.java:8)
    Exception in thread "main"

    le code java est le suivant :

    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
    package inter;
     
    public class HelloWorld {
     
    	 public native void displayHelloWorld();
     
    	static {
    	    System.loadLibrary("Synchro");
    	}
     
    	    public static void main(String[] args) {
    	       new HelloWorld().displayHelloWorld();
    	    }
     
    }


    ma dll s'appelle Synchro.dll.
    Je l'ai déposé dans Windows/sytem32 et aussi dans windows.
    Mon path est : c:\windows\Sytem32.

    Quelqu'un a t il une idee? pourquoi la dll n'est elle pas trouvee?
    NB : je travaille sous eclipse, j'ai généré mon HelloWorld.h à partir de la commande "javah -jni HelloWorld" j'ai créé un projet sous Visual C++ et j'ai créé "Synchro.cpp" faisant appel à HelloWolrd.h et jni.h. Ensuite j'ai compilé ma dll avec Visual C++ toolkit 2003 avec la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cl /LD /I"C:\Program Files\Microsoft Visual Studio\VC98\Include" /I"C:\Program Files\Microsoft Visual Studio\VC98\Lib" /I"C:\Program Files\Java\jdk1.5.0_05\include" /I"C:\Program Files\Java\jdk1.5.0_05\include\win32" /Fe"C:\Program Files\Microsoft Visual Studio\MyProjects\Synchro\Synchro.dll" "C:\Program Files\Microsoft Visual Studio\MyProjects\Synchro\Synchro.cpp" /link /libpath:"C:\Program Files\Microsoft Visual Studio\VC98\Lib" /defaultlib:"C:\Program Files\Microsoft Visual Studio\VC98\Lib\WS2_32.lib"
    et quand je run sous eclipse j'obtiens le message d'erreur disant qu'il ne trouve pas la dll.
    Une idee?

    Merci d'avance pour vos réponses

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Points : 142
    Points
    142
    Par défaut
    Bonjour,
    Je n'ai pas d'experience en ce domaine, mais à ta place, je me poserai fortement la question de savoir si java utilise le path système ou s'il se contente de regarder dans son classpath ?

    A+
    Joris

  3. #3
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    je suis bloqué sur une erreur du meme type, tente ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package inter;
     
    public class HelloWorld {
        public native void displayHelloWorld();
     
           public static void main(String[] args) {
              System.loadLibrary("Synchro");
              new HelloWorld().displayHelloWorld();
           }
    }

  4. #4
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    hello,

    Tu dois créer une variable d'environnement nommée 'LIBPATH' où tu indique le path de ta dll
    ou tu peux aussi lancer l'exécution avec la commande '-Djava.library.path=...' pour spécifier cet emplacement ;-)

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    essaie de rajouter dans ta ligne de compilation -Djava.library.path="la-ou-est-ta-dll", ou bien mets ta dll la ou se trouve ton futur HelloWorld.class (un peu bourrin quand meme).

  6. #6
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    Citation Envoyé par cymp
    essaie de rajouter dans ta ligne de compilation -Djava.library.path="la-ou-est-ta-dll", ou bien mets ta dll la ou se trouve ton futur HelloWorld.class (un peu bourrin quand meme).
    ==> A l'exécution plutôt ;-)

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    exact desole

  8. #8
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    et dans le cas où vous utilisez jnlp+java webstart, vous specifieriez quoi pour le java.library.path?

  9. #9
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    sorry mais je ne capte pas trop le problème...

  10. #10
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    bah c a d, qu'avec java web start, le client telecharge puis lance l'appli.
    il telecharge une archive comportant les dlls puis dans le main de l'appli, il charge les dll : System.loadLibrary(...);
    cependant, j'ai pas trop l'impression qu'il trouve ces dll, donc
    - soit elles ont pas été téléchargées
    - soit l'appli n'y a pas accès
    - soit les dlls se trouvent ailleurs que dans le dossier où se lance l'appli
    ca me bloque et je ne comprends pas pourquoi

  11. #11
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    ok c'est bon, j'ai trouver le truc
    en fait, mes System.loadLibrary(...) ne se trouvaient pas dans un bloc static dans la class mais je les avaient mise dans le public static void main.
    Un pote a tester, ca a l'air de fonctionner, bien bien

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 83
    Points
    83
    Par défaut
    Tout d'abord merci à tous pour vos réponses.
    Le problème venait du fait qu'il ne trouvait pas la dll. J'ai recopié cette dernière dans JAVA_HOME/bin et la il l'a trouvé... je pensais que dans le Path ca suffisait mais bon...
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. de "HelloWorld.c" en "HelloWorld.java" avec JNI
    Par sammyac dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 23/02/2009, 16h03
  2. Réponses: 5
    Dernier message: 14/05/2008, 18h14
  3. lancer DLL depuis java
    Par ninours23 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 18/04/2008, 12h58
  4. Requetes acces lancées depuis Excel avec variables
    Par jackfred dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/06/2007, 15h37
  5. Réponses: 2
    Dernier message: 19/12/2006, 15h51

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