¿Cómo llamar a la biblioteca de enlaces dinámicos?
VC llama a la colección dll Para llamar a DLL, primero debe asignar el archivo DLL al espacio de direcciones del proceso del usuario y luego puede realizar una llamada a la función. método de funciones generales dentro del proceso. Windows proporciona dos métodos para asignar una DLL al espacio de direcciones del proceso: 1. Enlace implícito en tiempo de carga
Este método requiere el archivo LIB generado al compilar el proyecto DLL, que contiene el permiso de DLL. Una lista de todos funciones llamadas por la aplicación Cuando el vinculador descubre que la aplicación llama a una función enumerada en el archivo LIB, agregará cierta información a la imagen del archivo ejecutable de la aplicación. Esta información indica que la función está incluida. el archivo DLL. Cuando esta aplicación se está ejecutando, es decir, cuando el sistema operativo genera su archivo ejecutable como un archivo de imagen, el sistema verificará la información sobre la DLL en el archivo de imagen y luego asignará el archivo DLL al espacio de direcciones de la proceso.
Cuando el sistema intenta cargar el archivo en el espacio de direcciones del proceso a través del nombre del archivo DLL, la ruta que busca el archivo DLL es la siguiente en orden:
· El directorio cuando el programa se está ejecutando, es decir, el directorio donde se encuentra el archivo ejecutable;
·Directorio de trabajo del programa actual
·Directorio del sistema: para Windows95/98, puede llamar la función GetSystemDirectory para obtenerlo, para WindowsNT/2000, se refiere al directorio del sistema de Windows de 32 bits, que también se puede obtener llamando a la función GetSystemDirectory. El valor obtenido es SYSTEM32.
·Directorio de Windows
·Todos los directorios enumerados en la variable de entorno PATH
Hay tres formas de cargar el archivo LIB de una DLL en VC: p>
p>
① El archivo LIB se agrega directamente a la lista de archivos del proyecto
Abra la página Vista de archivos en VC, seleccione el nombre del proyecto, haga clic derecho y luego seleccione el Menú "Agregar archivos al proyecto". En el cuadro de diálogo de archivo emergente, seleccione el archivo LIB que se agregará a la DLL.
②Establezca la configuración del proyecto para cargar el archivo LIB de la DLL.
Abra el menú Configuración del proyecto del proyecto, seleccione Enlace y luego ingrese la DLL en el cuadro de texto. en el archivo LIB de módulos de objeto/biblioteca.
③A través del código del programa
Agregue la directiva de precompilación #pragma comentario (lib, "*.lib"). La ventaja de este método es que puede usar directivas de precompilación condicionales para vincular diferentes. versión del archivo LIB. Porque, en el modo de depuración, el archivo LIB generado es la versión de depuración, como Regd.lib; en el modo de lanzamiento, el archivo LIB generado es la versión de lanzamiento, como Regr.lib;
Cuando la aplicación carga el archivo LIB de la DLL, también necesita incluir el archivo de encabezado (*.h) correspondiente a la DLL. El prototipo de función definido en la DLL se proporciona en este archivo de encabezado. Entonces declara.
2 Vinculación explícita en tiempo de ejecución (yo uso este método)
Aunque la vinculación implícita es más sencilla de implementar, también requiere DLL además de los archivos *.dll necesarios. Los archivos y los archivos *.lib no se pueden usar en aquellas situaciones en las que solo se proporcionan archivos *.dll y solo se pueden usar enlaces explícitos. Este método completa la carga y descarga de la DLL llamando a funciones API, que pueden usar la memoria de manera más eficiente. Este método se usa a menudo al escribir aplicaciones grandes. Los pasos de implementación específicos de este método de programación son los siguientes:
① Utilice la función API de Windows Cargar biblioteca o AfxLoadLibrary proporcionada por MFC para asignar el módulo DLL al espacio de memoria del proceso y cargar dinámicamente el Módulo DLL.
② Utilice la función GetProcAddress para obtener el puntero a la función en la DLL que se llamará.
③Cuando la DLL no esté en uso, use la función Biblioteca gratuita o la función AfxFreeLibrary para descargar explícitamente la DLL del espacio de direcciones del proceso.
Ejemplo: llamar a un archivo dll en un programa de aplicación: primero se debe cargar el dll antes de poder llamar a la función en la tabla de exportación. Por ejemplo, use mfc para crear una prueba de proyecto basada en un cuadro de diálogo. , y en el cuadro de diálogo Coloque el botón "cargar" en el cuadro y agregue el código de carga primero.
1. Primero agregue el código de configuración de la variable al principio de testdlg.cpp: // Configure la variable global glibsample para almacenar el identificador dll HINSTANCE glibsample=null // Si está definido como el tipo HANDLE; , se producirá un error // Capítulo Las dos variables showme son punteros a la función showme() en la biblioteca dll
typedef int(* Showme)(void Showme; 2. Utilice el asistente de clases para agregar; el código para cargar el dll para el botón "cargar" void ctestdlg::onloadbutton() { //El código que se agregará es el siguiente if(glibsample!=NULL) {AfxMessageBox("el sample.dll ya se ha cargado. "); return; }//Al cargar sample.dll, no se agregó ninguna ruta, buscará (1) el directorio del sistema de Windows en tres rutas predeterminadas: \windows\system; //(2) cualquier directorio señalado por la ruta en DOS ; //(3) el directorio donde se encuentra el programa
glibsample=Loadlibrary("sample.dll"); //Devuelve la dirección de la función showme() en el dll showme=(Showme). )GetProcAddress(glibsample,"muéstrame");