Red de conocimiento informático - Material del sitio web - Cómo utilizar correctamente las bibliotecas de enlaces estáticos y las bibliotecas de enlaces dinámicos

Cómo utilizar correctamente las bibliotecas de enlaces estáticos y las bibliotecas de enlaces dinámicos

Las bibliotecas de enlaces estáticos y las bibliotecas de enlaces dinámicos son * * * formas de compartir código. Si utiliza una biblioteca de enlaces estáticos, le guste o no, todas las instrucciones de la biblioteca se incluirán directamente en el EXE final generado.

Está en el archivo; sin embargo, si usa una DLL, no es necesario incluirlo en el archivo EXE final. Cuando se ejecuta el archivo EXE, se puede hacer referencia y descargar dinámicamente a esta DLL, que es independiente del EXE.

Archivo. Otra diferencia entre las bibliotecas de enlaces estáticos y las bibliotecas de enlaces dinámicos es que las bibliotecas de enlaces estáticos no pueden contener otras bibliotecas de enlaces dinámicos o bibliotecas estáticas, pero también pueden contener otros enlaces dinámicos o estáticos.

Ku. A continuación se muestra una comparación general de las bibliotecas de enlaces estáticos y las reglas de llamada de bibliotecas de enlaces estáticos.

Para bibliotecas de enlaces estáticos (relativamente simples):

En primer lugar, el uso de bibliotecas de enlaces estáticos requiere que el desarrollador de la biblioteca las proporcione. h archivos de encabezado y. lib archivo para generar la biblioteca.

Formato de declaración. El archivo de encabezado h de la biblioteca generada es el siguiente:

función externa "C" tipo de retorno nombre de función (lista de parámetros

In. El archivo de código fuente cpp del programa que llama es el siguiente:

#Contiene "..\lib.h "

#Comentarios pragmáticos (lib, "..\\debug\ \ libTest.lib ")

//Especifique el enlace con la biblioteca estática.

En segundo lugar, porque la biblioteca de enlaces estáticos contiene todas las instrucciones en el archivo EXE generado por el programa que llama. Por lo tanto, si está utilizando una biblioteca de enlaces estáticos, no existe "exportar una función para que la utilicen los usuarios". Si quieres usarlo, ¡tenlo todo! ¡O no lo quiero en absoluto! :)

Para la biblioteca de vínculos dinámicos:

El uso de la biblioteca de vínculos dinámicos requiere que el desarrollador de la biblioteca proporcione la versión generada. archivos lib y . archivo dll. O simplemente proporcione archivos dll.

En primer lugar, debemos notar que hay dos tipos de funciones en la DLL:

(1) la DLL exporta funciones que las aplicaciones pueden llamar

(2) Las funciones internas de DLL solo se pueden usar en programas DLL y las aplicaciones no pueden llamarlas.

Por lo tanto, si el programa que llama quiere llamar a una función en la DLL, debe especificar qué función llamar de alguna forma o manera.

Así que aquí tienes dos preguntas:

Primera: ¿Cómo hacer una llamada telefónica? Así es como se hace una llamada telefónica.

2. El proceso de generación y las reglas de llamada de la biblioteca correspondientes a diferentes métodos de llamada.

Poco a poco fui desarrollando la pregunta.

En primer lugar, hay dos métodos de llamada: llamada dinámica y llamada estática.

En segundo lugar, se introducen el proceso de generación y las reglas de llamada de las bibliotecas para los dos métodos de llamada.

1 >Formato de declaración en llamada dinámica

. El archivo de encabezado h de la biblioteca generada es el siguiente:

La función externa "C" devuelve el nombre de la función (lista de parámetros) de tipo __declspec(dllexport);

Llamada. El archivo de código fuente cpp del programa de llamada es el siguiente:

Al comienzo del código de función principal

Defina el identificador del módulo DLL requerido y el puntero de función de la función para ser llamado en el módulo del módulo DLL.

La definición va seguida de los tres pasos estándar:

Obtener el módulo DLL requerido ->; devolver el identificador del módulo

LoadLibrary("Ruta del módulo DLL" )

Obtener la dirección de la función requerida ->; devolver el puntero de la función GetProcAddress(identificador del módulo, "nombre de la función")

Descargar el módulo DLL de la biblioteca libre (identificador del módulo) )

Llamada estática 2 gt

Llamada. El archivo de código fuente cpp del programa que llama es el siguiente:

#Include...

Dígaselo al compilador. El archivo lib correspondiente a la DLL.

#pragma comment(lib, "ruta y nombre de archivo")

La función externa "C" devuelve el tipo _declspec(dllimport) nombre de función (lista de parámetros) punto y coma.

int main()

{

.............

}