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

MFC Discussion :

problème de chargement dll


Sujet :

MFC

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut problème de chargement dll
    Bonjour,

    Je travaille sur un programme multi-thread. Je dois charger une dll. Que l'on soit en mode Debug ou Release, le problème est identique. Si je lance mon application par visual (Ctrl+F5), pas de problème. Par contre, si je double clique sur le fichier exe directement, le handle renvoyé est NULL...

    voici le bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      hDllInstance = AfxLoadLibrary("./KVBPlug.dll");
      if (hDllInstance == NULL)
      {
       AfxMessageBox("Erreur d'ouverture  de KVBPlug.dll",MB_ICONQUESTION,MB_APPLMODAL);
        SendMessage(WM_CLOSE);
        return TRUE;  
      }
    Voila une partie de l'aide de msdn france:

    LoadLibrary essaie de retrouver la DLL en effectuant la même séquence de recherche que celle suivie pour la liaison implicite. Si le système ne trouve pas la DLL ou si la fonction de point d'entrée retourne la valeur FALSE, LoadLibrary retourne NULL. Si l'appel à LoadLibrary spécifie un module de DLL déjà mappé dans l'espace d'adressage du processus appelant, la fonction retourne simplement un handle de la DLL et incrémente le décompte de référence du module.

    Je n'ai pas accès au code de la dll.
    J'ai déja essayé de placé la dll dans le system32, dans le même répertoire... rien ne change.

    Merci d'avance.


  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    lorsque tu travailles dans l'ide, le repertoire n'est pas le meme. Essaye de placer la dll dans le meme repertoire quand tu le lances depuis l'explorateur

    question subsidiaire, il n'y aurait pas un SetCurrentDirectory qui viendrait perturber tout ca ?

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Ton plugin se trouve bien au même endroit que ton exe ?
    Car VC++ modifie le répertoire courant quand tu lances depuis l'IDE.
    Tu devrais enlever le "./" aussi devant ton nom de plugin.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    met ta dll dans system32 et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     hDllInstance = AfxLoadLibrary("KVBPlug.dll");
    enleve ./

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    C'est pas une bonne pratique de modifier system32. Les dll devraient être livrées dans le même répertoire que l'exe.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'ai déja essayé plusieur endroit pour la dll.

    je l'ai mis dans system32, dans le repertoire courant dans celui de l'exe.
    dans le code, j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    hDllInstance = AfxLoadLibrary("KVBPlug.dll"); 
    hDllInstance = AfxLoadLibrary("./KVBPlug.dll"); 
    hDllInstance = AfxLoadLibrary("C:\\...\\KVBPlug.dll");
    rien ne fonctionne sauf via visual

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    http://msdn.microsoft.com/library/en-us/dllproc/base/dynamic-link_library_search_order.asp

    Donc, tu mets uniquement le nom, el le tout dans le répertoire de l'exe, ça marche

    Aurelien: Un des deux intérets des DLL est aussi qu'elles peuvent être partagéees...

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Analyse ta dll KVBPlug.dll avec dependency walker. Si ta dll dépend d'une autre dll, son chargement peut échouer si cette 2° dll n'est pas "visible" depuis l'exe.

    Médinoc> en pratique ça a plus d'inconvénients que d'avantages (dll hell), et mis à part les dll système, c'est déconseillé.
    http://msdn.microsoft.com/library/en-us/dnsetup/html/dlldanger1.asp

    Même quand c'est nécessaire (par exemple tu installes un SDK et tu ne veux pas quand tu développes devoir copier-coller les dll pour chaque projet que tu crées), il est préférable d'ajouter le répertoire des dll dans le PATH plutôt que de copier les dll dans system32 ou %systemroot%.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Soluce trouvée:

    En effet, la dll en demandais une autre...

    Problème résolu

Discussions similaires

  1. [Compiler] Problème de chargement DLL
    Par AurelienAA dans le forum MATLAB
    Réponses: 3
    Dernier message: 04/06/2013, 21h24
  2. Problème sécurité chargement DLL
    Par probordelais dans le forum Applets
    Réponses: 1
    Dernier message: 19/10/2011, 17h48
  3. Problème de chargement dll crt
    Par fat52 dans le forum Visual C++
    Réponses: 2
    Dernier message: 20/08/2010, 09h44
  4. Problème de chargement DLL pendant deploiement
    Par schnourf dans le forum C#
    Réponses: 9
    Dernier message: 02/07/2007, 15h17
  5. Problème de chargement DLL
    Par Balthos dans le forum C++
    Réponses: 7
    Dernier message: 21/11/2006, 16h18

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