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.

Que voulez-vous faire ?

Sur quels éléments souhaitez-vous obtenir des informations supplémentaires ?

Voir aussi