Votre question

Modifier le chemin des DLL dans un projet

Tags :
  • Dll
  • Programmation
Dernière réponse : dans Programmation
24 Septembre 2008 21:49:05

Bonjours a tous et a toutes, je pense que le sujet n'est pas tres explicite !
Je développe:
-Dans mon projet, il y a pas mal de dlls (puisque je suis en SDL, avec SDL_Image, Fmod, etc) donc j'ai 9 dlls, et ça fait moche quand tout ç est dans le meme dossier que l'executable (on ne sait plus ou donner de la tete, ni quoi executer, je me mais à la place de l'utilisateur :) ).
Donc j'aimerais creer un dossier dlls et le mettres la dedans, mais quand je fais ça il ne trouve plus les dlls, donc je suppose que ça doit etre dans un reglage de l'IDE, et ç'est la que je suis bloqué.
Comment modifier le rêpertoir des dlls ?
Je suis sous Dev c++, en C.
Merci

Autres pages sur : modifier chemin dll projet

a b L Programmation
24 Septembre 2008 23:05:28

Au final, tu garderas les DLL à côté de l'exe, on parie ? ;) 

Je t'explique comment ça fonctionne sous windows. Le fichier .exe contient les liens vers les DLL dynamiques à utiliser (avec l'ensemble de ses fonctions). Si l'on suppose que les DLL ne sont pas déjà chargées en mémoire, windows va chercher le fichier DLL portant la bon nom, et il va chercher dans l'ordre:
- dans le répertoire courant de l'exe, précisément le chemin de l'image (au sens binaire) utilisée pour créer le processus.
- dans les répertoires référencé dans la variable d'environnement PATH
S'il ne la trouve pas, il renvoie une erreur, il ne va pas chercher plus loin.

Donc si tu tiens absolument à le charger d'un autre répertoire, il ne faut pas compiler en liant la bibliothèque, utiliser un LoadLibrary, et n'utiliser les fonctions de la dll qu'en manipulant les pointeurs de fonctions retournées par GetProcAddress. En utilisant ça, tu ne charge pas la DLL lors du chargement du processus, mais n'importe dans le code (là où tu as mis le LoadLibrary). Du coup dans ce cas:
- soit tu mets le chemin complet ou relatif de la bibliothèque
- soit, avant l'appel au LoadLibrary, tu utilises SetDllDirectory pour ajouter un chemin de répertoire de DLL
- soit, avant l'appel au LoadLibrary, tu modifies le répertoire courant avec SetCurrentDirectory

Bref, il est préférable de soit de partager la DLL dans C:\windows\system32, soit, meilleure solution, de laisser les DLL à côté de l'exe. Comme de toutes façon, avec un installateur (genre Innosetup ou NSIS ;)  ), tu as mis les raccourcis qui vont bien, ça ne devrait pas gêner l'utilisateur :) 
25 Septembre 2008 08:22:52

ok merci cricky pour ce mini cour, je vais obter pour un installateur
a b L Programmation
27 Septembre 2008 12:01:26

Vas-y carly31 (pardon Patrick45 :D  ), explique-nous comment ça fonctionne ou donne le lien MSDN :D 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS