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

C++ Discussion :

[DLL] sous repertoire dll introuvable


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut [DLL] sous repertoire dll introuvable
    Salut tout le monde,

    Je travaille avec C++builder6.0

    j'ai créer pour la première fois une DLL pour une application.lol

    Pour le moment j'essaye juste de faire passer une variable d'une classe que j'ai créer dans la DLL vers mon appli.
    Ma DLL est dans un sous repertoire du repertoire de mon appli et je ne souhaite pas la mettre dans le meme repertoire que mon appli.

    j'ai lié la lib au projet de l'application et j'ai inclu le .h à l'appication.

    Quand je compile je n'ai pas de message d'erreur ( donc c'est que je dois bien récupérer la variable dans mon appli). Mais quand je l'execute il me dit qu'il ne trouve pas ma DLL.

    Je me doute bien que c'est le fait qu'elle soit dans le sous repertoire, donc comment faire pour que l'appli sache trouver cette DLL (sans la deplacer )?


    Merci de votre aide !

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il faut l'ajouter dans le path de l'utilisateur, autant dire que c'est plus compliqué que de la mettre dans le même dossier.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    ok merci,

    tu fais ça comment ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Faire quoi ? Modifier le PATH ? Tu dois le faire avant l'exécution du programme, à la main en modifiant les variables d'environnement, donc non, ce n'est pas la solution à envisager. La SEULE solution décente est de mettre le fichier dans le dossier du programme.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    mais je ne comprends pas tout alors...

    Beaucoup de programme n'ont pas toutes leurs dlls dans leur dossier où se trouve l'executable ! Les dll sont rangés dans des sous dossier. Sinon ca serait un sacrée foutoire dans le dossier du programme.

    Moi j'aimerais bien ne pas mélanger ma dll et tout ce qui l'entoure à mon programme car apres c'est le bordel dans le dossier de mon programme.

    j'ai 39 fichiers pour mon interface, que je laisse dans le dossier principal du programme. Apres j'ai un sous dossier pour chaque DLL que je vais créer. Pour ma premiere DLL j'ai deja 15 fichiers et je commence juste à la créer!

    est ce que tu comprends mon probleme ?


    Merci de m'aider!

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Une autre solution consiste à charger dynamiquement les bibliothèques, mais là, c'est plus long. Si tu es débutant, n'utilise pas cette solution. Si tu es intermédiaire, regarde du côté de LoadLibrary() pour voir si c'est vraiment rentable (à mon avis non).

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    j'avais vu ceci sur un tuto de Devellopez.com

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        HINSTANCE hinstDLL;
        MYDLLFUNC ImpFuncDLL;
        int iRet;
     
        if ((hinstDLL=LoadLibrary("Project1.dll"))) {
            ImpFuncDLL = GetProcAddress(hinstDLL, "LoadForm");
            if (ImpFuncDLL) {
                iRet = ImpFuncDLL();
            }
            FreeLibrary(hinstDLL);
        }

    Mais bon si je dois faire ça a chaque fois que j'utilise une fonction de ma libraires je suis pas dans le ca** lol.

    Il n'y a pas un moyen pour dire que ma Dll n'est pas avec l'executable mais dans un sous dossier de l'executable ... ?

    de plus la libraire qui est associé à ma dll, est elle aussi dans ce dossier, ainsi que l'ensemble des .h que je vais créer.

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par adurandet Voir le message
    Mais bon si je dois faire ça a chaque fois que j'utilise une fonction de ma libraires je suis pas dans le ca** lol.
    Malheureusement, c'est le cas, et je ne te parle même pas des fonctions C++ qui sont décorées...
    Citation Envoyé par adurandet Voir le message
    Il n'y a pas un moyen pour dire que ma Dll n'est pas avec l'executable mais dans un sous dossier de l'executable ... ?

    de plus la libraire qui est associé à ma dll, est elle aussi dans ce dossier, ainsi que l'ensemble des .h que je vais créer.
    Non, il n'y a pas moyen.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    je susi desolé d'insister ...

    mais par exemple quand je regarde dans ProgramFiles une application comme NotePad++.

    elle a des dll dans le fichier de l'executables et des fichiers dll dans un dossier plugIns.

    Les dll du dossier plusing doivent bien etre utilsier par notepad++ sinon elles ne seraient pas là...


    Comme apparement c'est pas possible, faut il que je copie juste la dll ou aussi le .h et la lib ?


    Merci des tes reponses en tout cas miles!

  10. #10
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Peut être parce que le PATH est en conséquence ou que NotePad++ utilise le chargement dynamique. Pour le C++ et la décoration il faut ajouter un fichier .def au projet pour ne pas avoir a faire un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetProcAddress(hinstDLL, "LoadForm12sds@sd213");
    Le LoadLibrary et le Freelibrary tu ne le fais qu'une fois par contre

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Les plugins sont chargés dynamiquement avec LoadLibrary...

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 588
    Points
    41 588
    Par défaut
    Les plug-ins ne sont jamais chargés dès le chargement du programmes, ils sont chargés par LoadLibrary() (ou pire, les fonctions COM/OLE).

    Quand un plug-in est chargé, le programme est déjà en train d'exécuter le main(), donc il peut avoir fait ce qu'il veut pour les répertoires.

    Edit: Argh, grillé par Miles.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    Ok merci bien pour vos réponses c'est tous ce que je voulais savoir !



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

Discussions similaires

  1. utilisation d'une DLL sous java (DLL/Com)
    Par thouraya dans le forum Général Java
    Réponses: 0
    Dernier message: 07/06/2012, 18h04
  2. dll dans sous repertoire
    Par cricrides dans le forum VB.NET
    Réponses: 3
    Dernier message: 14/01/2010, 21h46
  3. dll sous cygWin
    Par victorracine dans le forum C
    Réponses: 10
    Dernier message: 31/07/2003, 12h33
  4. Chargement dynamique de DLL sous Unix
    Par Willou dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 18/12/2002, 19h25

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