OVH Cloud OVH Cloud

accéder à une DLL

16 réponses
Avatar
PurL
Bonjour,

J'ai une DLL dans un répertoire perso.
Quand je fais une appli dans laquelle je linke le .lib correspondant, c'est
OK.
Mais à l'éxcution, windows m'affiche un message comme quoi il trouve ma DLL,
ce qui est normal puisqu'elle ne fiigure pas dans les répertoires de
recherche de windows.

Ma question est : comment rajouté mon répertoire perso aux répertoires de
recherche de windows afin qu'il trouve ma DLL ?
En effet j'aimerais éviter d'avoir à copier ma DLL dans le répertoire
SYSTEM32 de windows.

Merci,

PurL

6 réponses

1 2
Avatar
Aurélien REGAT-BARREL
> Oui. De toutes façons, c'est toujours dynamique. Dans le cas de
LoadLibrary, c'est un chargement explicite. Mais est-ce un problème? Au
moins, vous aurez le contrôle du répertoire de chargement.



Oui mais, faut se cogner les GetProcAddress après... Et si c'est une dll C++
avec des classes exportées, c'est cher payé je trouve. Mieux vaut se créer
un manifest.

--
Aurélien REGAT-BARREL
Avatar
Patrick Philippot
Aurélien REGAT-BARREL wrote:
Oui mais, faut se cogner les GetProcAddress après...



Tout dépend du nombre de fonctions. Et encore. S'il y en a peu, ce n'est
vraiment pas un souci. S'il y en a beaucoup, la technique de l'export en
une fois via un tableau d'adresses (qui est alors le seul élément
exporté) est assez efficace.

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Avatar
Thierry
"Aurélien REGAT-BARREL" wrote in
news:40911e85$0$26442$:

Ou utiliser un fichier de configuration créé à l'installation afin de
préciser le chemin d'accès et préfixer le nom de la DLL avec le path au
moment du chargement.



C'est valable que pour le linkage dynamique non ?
Ou est-ce possible avec le delayed-load, technique dont je n'arrive pas à
avoir d'infos ?



C'est possible avec le delay-load : se placer dans le bon repertoire, puis
appeler au moins une fonction de chaque DLL a charger.
Avatar
Aurélien REGAT-BARREL
> C'est possible avec le delay-load : se placer dans le bon repertoire, puis
appeler au moins une fonction de chaque DLL a charger.



Comment ça marche exactement ?
Comment indiquer quelle dll loader ?

--
Aurélien REGAT-BARREL
Avatar
Thierry
"Aurélien REGAT-BARREL" wrote in
news:40975644$0$13075$:

C'est possible avec le delay-load : se placer dans le bon repertoire,
puis appeler au moins une fonction de chaque DLL a charger.



Comment ça marche exactement ?



Dans le detail je sais pas.

Comment indiquer quelle dll loader ?



deux pragma : un pour lier avec delayimp, l'autre pour preciser la DLL a
charger en delay load.
je posterai demain, si j'y pense.
Avatar
Thierry
Bonjour,

Thierry a écrit :

deux pragma : un pour lier avec delayimp, l'autre pour preciser la DLL a
charger en delay load.
je posterai demain, si j'y pense.



#pragma comment(lib, "delayimp")
#pragma comment(linker, "/DelayLoad:Netapi32.dll")

La DLL sera chargée lors de l'appel de la premiere fonction implementée
dans cette DLL : ca permet de controler quand le chargement sera fait (se
mettre dans le bon repertoire) sans avoir a faire des GetProcAddress, et de
catcher soi-même les erreurs (try/catch) pour eviter la moche boite
standard de Windows.

--
« Always look at the bright side of the life... »
1 2