LoadLibrary et AfxLoadLibrary
Les processus appellent LoadLibrary ou LoadLibraryEx pour lier explicitement à une DLL. (Les applications MFC utilisent AfxLoadLibrary ou AfxLoadLibraryEx.) Si la fonction réussit, elle mappe la DLL spécifiée dans l’espace d’adressage du processus appelant et retourne un handle à la DLL. Le handle est requis dans d’autres fonctions utilisées pour la liaison explicite( par exemple, GetProcAddress
et FreeLibrary
. Pour plus d’informations, consultez Liaison explicite.
LoadLibrary
tente de localiser la DLL à l’aide de la même séquence de recherche utilisée pour la liaison implicite. LoadLibraryEx
vous donne plus de contrôle sur l’ordre de chemin de recherche. Pour plus d’informations, consultez l’ordre de recherche de la bibliothèque de liens dynamiques. Si le système ne trouve pas la DLL ou si la fonction de point d’entrée retourne FALSE, LoadLibrary
retourne NULL. Si l’appel à LoadLibrary
spécifie un module DLL déjà mappé dans l’espace d’adressage du processus appelant, la fonction retourne un handle de la DLL et incrémente le nombre de références du module.
Si la DLL a une fonction de point d’entrée, le système d’exploitation appelle la fonction dans le contexte du thread appelé LoadLibrary
ou LoadLibraryEx
. La fonction de point d’entrée n’est pas appelée si la DLL est déjà attachée au processus. Cela se produit lorsqu’un appel précédent vers LoadLibrary
ou LoadLibraryEx
pour la DLL n’a pas eu d’appel correspondant à la FreeLibrary
fonction.
Pour les applications MFC qui chargent des DLL d’extension MFC, nous vous recommandons d’utiliser AfxLoadLibrary
ou AfxLoadLibraryEx
non LoadLibrary
ou LoadLibraryEx
. Les fonctions MFC gèrent la synchronisation des threads avant de charger explicitement la DLL. Les interfaces (prototypes de fonction) vers AfxLoadLibrary
et AfxLoadLibraryEx
sont les mêmes que LoadLibrary
et LoadLibraryEx
.
Si Windows ne peut pas charger la DLL, votre processus peut tenter de récupérer à partir de l’erreur. Par exemple, il peut avertir l’utilisateur de l’erreur, puis demander un autre chemin d’accès à la DLL.
Important
Veillez à spécifier le chemin complet des DLL. Le répertoire actif peut d’abord être recherché lorsque les fichiers sont chargés par LoadLibrary
. Si vous ne qualifiez pas entièrement le chemin d’accès du fichier, un fichier autre que celui prévu peut être chargé. Lorsque vous créez une DLL, utilisez l’option de l’éditeur de liens /DEPENDENTLOADFLAG pour spécifier un ordre de recherche pour les dépendances DLL liées statiquement. Dans vos DLL, utilisez les deux chemins d’accès complets pour charger explicitement des dépendances et LoadLibraryEx
appeler AfxLoadLibraryEx
des paramètres pour spécifier l’ordre de recherche du module. Pour plus d’informations, consultez La sécurité de la bibliothèque de liens dynamiques et l’ordre de recherche de bibliothèque de liens dynamiques.