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

Java Discussion :

Répertoire d'exécution DLL


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de titus55
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 115
    Par défaut Répertoire d'exécution DLL
    Bonjour,

    j'ai un problème assez bizarre sur lequel je bloque depuis un moment.
    J'ai le code ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    File file1 = new File("../../native");
    System.out.println(file1.getAbsolutePath() + " - " + file1.exists());
     
    // Appel d'une DLL avec JNA //
    ....
    // Fin de l'appel, aucune erreur lors de l'exécution //
     
    File file2 = new File("../../native");
    System.out.println(file2.getAbsolutePath() + " - " + file2.exists());
    Ce qui me donne en sortie dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    D:\PROJETS\WORKSPACE\Test\..\..\native - true
    D:\PROJETS\WORKSPACE\Test\..\..\native - false
    Après l'appel de la DLL, le chemin relatif vers le répertoire native n'est plus correctement résolut par la JVM.
    En fouillant un peu j'ai vu que la méthode File.exists() utilise une DLL (je suis sous WinXP).

    Si je rajoute l'instruction :
    à la fin de mon code un répertoire native est créé dans le dossier C:\Program Files\Java soit 2 dossiers au dessus de mon java.exe.

    J'ai l'impression que lorsque j'appelle ma DLL, le répertoire courant d'exécution des DLL est réinitialisé au répertoire courant du java.exe de ma JVM.

    Quelqu'un sait comment faire pour redéfinir ce répertoire courant?

    Merci

    EDIT:
    Je précise que les valeurs System.getProperty("user.dir"), System.getProperty("java.library.path") et System.getProperty("sun.boot.library.path") sont les mêmes avant et après l'exécution de ma DLL.

  2. #2
    Membre confirmé Avatar de titus55
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 115
    Par défaut
    J'ai trouvé en fouillant dans la MSDN:
    Il faut appeler la méthode Kernel32.GetCurrentDirectory(...) pour avoir la valeur du répertoire courant du processus en cours.

    Après l'appel à ma DLL je vois que la valeur a changé.
    On peut redéfinir cette valeur avec la méthode Kernel32.SetCurrentDirectory(...).

    J'ai utilisé JNA pour le mapping de la DLL kernel32.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/08/2007, 18h02
  2. [CASL] Exécuter dll
    Par rajawi00 dans le forum Autres langages
    Réponses: 1
    Dernier message: 17/07/2007, 19h22
  3. fichiers dans le Répertoire d'exécution
    Par bhahmed dans le forum C++Builder
    Réponses: 12
    Dernier message: 15/09/2006, 19h44
  4. Réponses: 5
    Dernier message: 01/02/2006, 21h55
  5. Sécuriser un répertoire via une DLL
    Par kazarn dans le forum MFC
    Réponses: 2
    Dernier message: 05/03/2005, 17h33

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