LoadLibrary y AfxLoadLibrary
Los procesos llaman a LoadLibrary o LoadLibraryEx para vincular explícitamente a un archivo DLL. (Las aplicaciones de MFC usan AfxLoadLibrary o AfxLoadLibraryEx). Si la función se ejecuta correctamente, asigna el archivo DLL especificado en el espacio de direcciones del proceso de llamada y devuelve un controlador para el archivo DLL. El controlador es necesario en otras funciones empleadas para la vinculación explícita, como GetProcAddress
y FreeLibrary
. Para obtener más información, vea Vinculación explícita.
LoadLibrary
intenta localizar el archivo DLL con la misma secuencia de búsqueda que se usa para la vinculación implícita. LoadLibraryEx
proporciona un mayor control sobre el orden de la ruta de búsqueda. Para obtener más información, vea Orden de búsqueda de las bibliotecas de vínculos dinámicos. Si el sistema no puede encontrar el archivo DLL o si la función de punto de entrada devuelve FALSE, LoadLibrary
devuelve NULL. Si la llamada a LoadLibrary
especifica un módulo DLL que ya está asignado en el espacio de direcciones del proceso de llamada, la función devuelve un controlador para el archivo DLL e incrementa el recuento de referencias del módulo.
Si el archivo DLL tiene una función de punto de entrada, el sistema operativo llamará a la función en el contexto del subproceso que ha llamado a LoadLibraryEx
o LoadLibrary
. Si el archivo DLL ya está asociado al proceso, no se llama a la función de punto de entrada. Esto sucede cuando una llamada anterior a LoadLibrary
o LoadLibraryEx
para la DLL no ha obtenido una llamada correspondiente a la función FreeLibrary
.
En el caso de las aplicaciones de MFC que cargan archivos DLL de extensión de MFC, se recomienda usar AfxLoadLibrary
o AfxLoadLibraryEx
en lugar de LoadLibrary
o LoadLibraryEx
. Las funciones de MFC controlan la sincronización de subprocesos antes de cargar el archivo DLL explícitamente. Las interfaces (prototipos de función) para AfxLoadLibrary
y AfxLoadLibraryEx
son las mismas que para LoadLibrary
y LoadLibraryEx
.
Si Windows no puede cargar el archivo DLL, el proceso puede intentar recuperarse del error. Por ejemplo, podría mostrar una notificación al usuario el error y, luego, solicitar otra ruta de acceso al archivo DLL.
Importante
Asegúrese de especificar la ruta de acceso completa de los archivos DLL. Cuando LoadLibrary
carga los archivos, se puede buscar primero en el directorio actual. Si no se usa un nombre completo para la ruta de acceso del archivo, es posible que se cargue un archivo que no sea el deseado. Cuando cree un archivo DLL, use la opción /DEPENDENTLOADFLAG del enlazador a fin de especificar un orden de búsqueda para las dependencias del archivo DLL vinculadas estáticamente. En los archivos DLL, use rutas de acceso completas para las dependencias cargadas explícitamente, así como parámetros de llamada LoadLibraryEx
o AfxLoadLibraryEx
para especificar el orden de búsqueda de módulos. Para obtener más información, consulte Seguridad de la biblioteca de vínculos dinámicos y Orden de búsqueda de las bibliotecas de vínculos dinámicos.