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

Servlets/JSP Java Discussion :

Chargement d'une DLL.


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Par défaut Chargement d'une DLL.
    Bonjour,

    Je découvre le développement de servlet et me confronte à un problème de chargement d'une DLL. J'ai pourtant rédigé la même classe pour être executé en ligne de commande, je n'ai pas d'erreur et ma classe fonctionne.

    Je dois charger "MaDLL.dll" contenue dans le repertoire c:\Dev\Java\dll\. (je suis en environnement Windows 2008 r2).

    J'ai pas mal butiné sur le net et ai essayé, les unes après les autres, les méthodes suivantes :

    - J'ai défini java.library.path dans mon code ( par l'appel de System.setProperty("java.library.path","C:/Dev/Java/Dll");)
    - J'ai défini CATALINA_OPTS dans catalina.bat (set CATALINA_OPTS="-Djava.library.path=C:/Dev/Java/Dll")
    - J'ai défini la clef dans le registre HKEY_LOCAL_MACHINE\SOFTWARE\Apache...\Tomcat\7.0\... à la même valeur.

    Ces trois méthodes sont sans effet, System.loadLibrary("madll"); renvoie no madll in java.library.path.

    Si j'appel explicitement la DLL (System.load("C:/Dev/Java/Dll/madll.dll");) j'obtiens comme erreur dans la console : java.lang.UnsatisfiedLinkError: C:\Dev\Java\Dll\madll.dll: Can't find dependent libraries. L'ensemble des DLL sont pourtant dans le même répertoire. (c:\Dev\Java\Dll)

    Pour l'heure, si j'écris quelques lignes avant le chargement de la DLL :
    System.setProperty("java.library.path","C:/Dev/Java/Dll");
    System.out.println("java.library.path = " + System.getProperty("java.library.path"));


    Alors, je trouve "java.library.path = C:/Dev/Java/Dll" dans la console

    Quelqu'un peut il m'éclairer ?

    Séb

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    D'abord, les chemins, sous windows, ce sont des antislash ( \ ) et pas des slash comme tu le fais ( / ). Ensuite, si ta dll s'appelle MaDLL.dll, utilise une casse explicite, pour éviter les problèmes.

  3. #3
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Tu dois simplement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.loadLibrary("MaDLL");
    (sans le suffixe .dll)

    PS : tiens, ça me rappelle qqch de récent http://www.developpez.net/forums/d12...partir-applet/

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pluie de dll ce mois-ci, en moins de deux semaines, on a épuisé le quota annuel de gens utilisant loadLibrary

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Par défaut
    Merci pour vos réponses.
    J'ai modifié l'appel comme suit :

    System.setProperty("java.library.path","C:\\Dev\\Java\\Dll;");
    System.out.println("java.library.path = " + System.getProperty("java.library.path"));
    System.loadLibrary("MaDLL");


    J'ai toujours une erreur :java.lang.UnsatisfiedLinkError: no MaDLL in java.library.path

    J'ai l'impression que le problème réside plus dans la déclaration de java.library.path que dans le chargement de la DLL puisque si je charge la dll avec System.load("C:\\Dev\\Java\\Dll\\MaDLL.dll"); j'obtiens toujours l'erreur java.lang.UnsatisfiedLinkError: C:\Dev\Java\Dll\MaDLL.dll: Can't find dependent libraries.

    Que puis je faire ?




    Citation Envoyé par tchize_ Voir le message
    D'abord, les chemins, sous windows, ce sont des antislash ( \ )
    et pas des slash comme tu le fais ( / ). Ensuite, si ta dll s'appelle MaDLL.dll, utilise une casse explicite, pour éviter les problèmes.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je suppose que ta dll dépend d'autres librairies dlls? Il faut savoir que seule la dll que tu charge depuis java a un rapport avec java.library.path. Les dlls chargée par ta dlls suivent le modèle utilisé par l'OS, a savoir qu'elles doivent être dans le PATH.

    Aussi, rien ne sert de définir java.library.path avec System.setProperty, de mémoire la valeur est lue une fois pour toute au démarrage de la jvm et la changer ne fait rien (donc à modifieren ligne de commande)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Par défaut
    Merci pour ce retour.

    Le problème était en effet la. J'ai ajouté mon repertoire au PATH et obtiens un fonctionnement normal.

    Merci de vos réponse (et désolé pour ce dépassement de quota de questions relatives au chargement de DLL ).


    Citation Envoyé par tchize_ Voir le message
    je suppose que ta dll dépend d'autres librairies dlls? Il faut savoir que seule la dll que tu charge depuis java a un rapport avec java.library.path. Les dlls chargée par ta dlls suivent le modèle utilisé par l'OS, a savoir qu'elles doivent être dans le PATH.

    Aussi, rien ne sert de définir java.library.path avec System.setProperty, de mémoire la valeur est lue une fois pour toute au démarrage de la jvm et la changer ne fait rien (donc à modifieren ligne de commande)

  8. #8
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    et en chargeant les autres DLL dans l'ordre inverse des dépendances ?

    Je n'ai jamais essayé (ayant toujours utilisé une DLL "autonôme") mais ce serait interessant de savoir si ça marche (à mon avis non ... car linkage suivant le modèle de l'OS, comme dirait Tchize).

Discussions similaires

  1. [VB] Problème de chargement d'une DLL
    Par Elijha dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/05/2006, 09h24
  2. Chargement d'une DLL
    Par olive_le_malin dans le forum MFC
    Réponses: 15
    Dernier message: 16/12/2005, 17h09
  3. Réponses: 4
    Dernier message: 03/11/2005, 13h57
  4. Contexte de chargement d'une DLL
    Par Guillemot dans le forum Windows
    Réponses: 2
    Dernier message: 10/07/2005, 09h34
  5. Chargement d'une DLL et utilisation du multithread
    Par Maitre Kanter dans le forum Langage
    Réponses: 6
    Dernier message: 07/09/2004, 23h18

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