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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    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 Expert
    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 : 46
    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
    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
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    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 Expert
    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 : 46
    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
    Par défaut
    C'est possible d'avoir un copié coller du problème ?
    Car le code va aider

    Merci

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    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 chevronné 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
    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.

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