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 :

Problème de chargement DLL


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Problème de chargement DLL
    J'ai un petit souci pour charger une dll.
    J'utilise LoadLibraryExW de la façon suivante:
    LoadLibraryExW(nom_de_la_dll, NULL, LOAD_WITH_ALTERED_SEARCH_PATH)
    Mais la dll ne se charge pas. Un GetLastError me renvoie une erreur 183, soit "Cannot create a file when that file already exists. "

    Ce qui est le plus curieux, c'est que ça ne me fait ça qu'avec une seule dll bien précise. En essayant d'en charger une autre, cela marche sans problème. J'ai même essayé de changer le nom de la dll, mais rien n'y fait.

    Si qqun avez une idée...

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Référence MSDN

    Ne pas utiliser la fonction Unicode directement -> LoadLibraryExW.
    Il faut utiliser LoadLibraryEx, ensuite c'est ton compilateur qui va bien mettre la fonction qui correspond LoadLibraryExW ou LoadLibraryExA suivant la configuration de ton projet !

    Bienvenu à toi sur www.developpez.net

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci bien pour la rapidité de réaction!!

    En utilisant LoadLibraryEx, mon compilo choisit LoadLibraryExA.
    Ca ne marche pas mieux: j'ai une erreur de compilation, le format de nom de fichier ne lui va pas.
    En fait, c'est un projet professionnel sur lequel j'apporte des corrections. Je ne tiens pas à faire trop de changement en profondeur. Donc comme normalement, cette partie du code fonctionne, je ne tiens pas à trop y toucher.

    Ce qui me dérange ici, c'est que le chargement de ce fichier se passe normalement sur certaines machines mais pas sur d'autres. (Notamment ici, c'est une machine avec Windows 2000 qui ne veux pas de ma dll)

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    C'est possible d'avoir un copié coller du problème ?
    Car le code va aider

    Merci

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Il semble bien que ce ne soit pas un problème de code, mais plutôt un problème d'indexation des dll.
    Ca marche nikel sous WinXP, mais pas sous Win2k.

    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
    16
    	  std::wstring	m_wsLoadFileDllPath;
     
      	// Load DLL and entry points
    		LogMacro("StartPeriph", "Loading EDC.DLL...");
    		m_hInstDLL = ::LoadLibraryExW(m_wsLoadFileDllPath.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
     
    		if (m_hInstDLL)
    		{
    			LogMacro("StartPeriph", "EDC.DLL loaded");
    			...
    		}
    		else
    		{
    			LogMacro("StartPeriph", "EDC.DLL *NOT* loaded");
    			...
    		}
    Voilà quand même le morceau de code où j'appelle la fonction.
    m_wsLoadFileDllPath contient le bon chemin d'accès.
    Si j'essaie de charger une des autres DLLs du projet, ça marche nickel. Donc, je persiste, le code est bon.

  6. #6
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Je te conseil de charger ta DLL avec l'outil depends.exe ( fourni avec le SDK windows). Pour verifier si ta DLL ne depend pas d'autre DLL qui ferai defaut.

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    J'ai un problème similaire : j'ai un programme Java qui doit utiliser une dll qu'on me fournit.
    Pour que cela fonctionne, j'utilise JNI, et j'ai créé une dll interface qui appelle les méthodes de la dll qu'on m'a fournit.

    Sous XP zéro souci (la dll interface est elle-même générée sous XP), mais sous Windows 2000, bug.

    Existe-t'il un problème de compatibilité entre les dll générées sous Windows XP et leur utilisation sous Windows 2000?
    Ou alors existe-t'il une astuce pour que ça fonctionne partout? (style utilisée les bibliothèques MFC en statique plutôt qu'en dynamique...)

    PS : comment on utilise depends.exe?

  8. #8
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Pour info, voici les fichiers recquis par ma dll interface :

    ADVAPI32.DLL
    COMCTL32.DLL
    COMDLG32.DLL
    GDI32.DLL
    KERNEL32.DLL
    MSVCRT.DLL
    NTDLL.DLL
    OLE32.DLL
    OLEAUT32.DLL
    OLEDLG.DLL
    OLEPRO32.DLL
    RPCRT4.DLL
    SHELL32.DLL
    SHLWAPI.DLL
    USER32.DLL
    WINSPOOL.DRV

    Est-ce que l'un d'entre-eux peut poser problème lors de l'utilisation sous Windows 2000? (fichier non-présent ou de version inadéquate)

    Merci d'avance.

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 tophque dans le forum MFC
    Réponses: 8
    Dernier message: 18/11/2005, 15h14

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