web-dev-qa-db-fra.com

Pourquoi Visual Studio ne trouve-t-il pas ma DLL?

Dans Visual Studio 2010, sous VC++ Directories > Executable Directories, J'ai spécifié le chemin d'accès à glew32d.dll. Cependant, lorsque je lance l'exécutable, il se plaint toujours.

Par contre, si je copie le DLL dans le dossier local et exécute le fichier exécutable, cela ne se plaint pas).

Quelqu'un peut-il s'il vous plaît me dire comment résoudre ce problème? Aussi, pourquoi Visual Studio ne reconnaît-il pas ce chemin?

Mise à jour Scénario: J'utilise actuellement un projet de modèle que j'utilise comme code de démarrage pour beaucoup de mes projets. Ce modèle dépend de glew32d.dll. Je stocke généralement toutes les dll dépendantes dans un dossier bin commun. J'espérais faire référence à ce dossier et Visual Studio pourrait lire les dll à partir de là, au lieu de devoir les copier à chaque fois. Quel serait un bon moyen de gérer cela?

44
brainydexter

Spécifier le chemin du fichier DLL dans les paramètres de votre projet ne garantit pas que votre application
trouve le DLL au moment de l'exécution. Vous avez seulement dit à Visual Studio comment trouver les fichiers dont il a besoin. Ça n'a rien
à faire avec la façon dont le programme trouve ce dont il a besoin, une fois construit.

Placer le fichier DLL dans le même dossier que l'exécutable est de loin la solution la plus simple. C'est le chemin de recherche par défaut pour les dépendances, vous n'aurez donc rien à faire de spécial si vous suivez cette voie.
Pour éviter de devoir le faire manuellement à chaque fois, vous pouvez créer un événement post-construction pour votre projet.
copiera automatiquement le DLL dans le répertoire approprié à la fin de la construction.

Vous pouvez également déployer le DLL sur Windows cache côte à côte et ajouter un manifeste à votre application qui spécifie l'emplacement.

60
Cody Gray

J'ai rencontré le même problème avec la même lib, j'ai trouvé une solution ici sur SO:

Recherchez dans MSDN "Comment: définir des variables d'environnement pour les projets". (Il s'agit de Projet> Propriétés> Propriétés de configuration> Débogage des propriétés "Environnement" et "Environnement de fusion" pour ceux qui sont pressés.)

La syntaxe est NAME = VALUE et des macros peuvent être utilisées (par exemple, $ (OutDir)).

Par exemple, pour ajouter C:\Windows\Temp au préfixe PATH:

PATH=C:\WINDOWS\Temp;%PATH%

De même, pour ajouter $ (TargetDir)\DLLS au PATH:

PATH=%PATH%;$(TargetDir)\DLLS

(Répondez par Multicolinéarité ici: Comment définir un chemin dans Visual Studio?

40
Oleg

essayez "propriétés de configuration -> débogage -> environnement" et définissez la variable PATH au moment de l'exécution

7
waytofall

Pour ajouter à la réponse d'Oleg:

J'ai pu trouver le DLL au moment de l'exécution en ajoutant $(ExecutablePath) de Visual Studio à la variable d'environnement PATH dans Propriétés de configuration-> Débogage. Cette macro correspond exactement à ce qui est défini dans la Configuration. Propriétés-> Répertoires VC++-> Répertoires exécutables *, si vous avez cette configuration pour pointer vers les DLL dont vous avez besoin, son ajout à votre PATH facilite la recherche des DLL au moment de l'exécution!

* En fait, je ne sais pas si la macro $(ExecutablePath) utilise le paramètre Répertoires exécutables du projet ou le paramètre Répertoires exécutables globaux des pages de propriétés. Étant donné que toutes mes bibliothèques que j'utilise souvent sont configurées via les pages de propriétés, ces répertoires s'affichent par défaut pour tous les nouveaux projets que je crée.

5
may5694