Cómo crear y llamar bibliotecas de enlaces dinámicos en VC 6.0
1. La diferencia entre la biblioteca de enlaces estáticos y la biblioteca de enlaces dinámicos:
Biblioteca de enlaces estáticos: las instrucciones en lib se incluyen directamente en el archivo EXE final generado.
Biblioteca de enlaces dinámicos: no es necesario incluir DLL en el archivo EXE final. Se puede hacer referencia a él y descargarlo dinámicamente cuando se ejecuta el archivo EXE.
Al mismo tiempo, la biblioteca de enlaces estáticos no puede contener otras bibliotecas de enlaces dinámicos o bibliotecas estáticas, mientras que la biblioteca de enlaces dinámicos puede contener otras bibliotecas dinámicas o estáticas.
2. DLL compatible con VC:
La preparación de DLL no tiene nada que ver con el lenguaje de programación específico y las bibliotecas de enlaces dinámicos se pueden encontrar en todas partes. DLL: biblioteca dinámica no MFC, DLL de reglas MFC y DLL de extensión MFC. Las aplicaciones pueden llamar a las funciones exportadas de DLL (o variables, clases); las funciones internas de DLL solo se pueden usar dentro del programa DLL y las aplicaciones no pueden llamarlas.
3. La forma de declarar una función exportada:
Una forma es agregar "_declspec(dllexport)" entre el tipo de declaración de la función y el nombre de la función.
Otro método utiliza la declaración del archivo de definición del módulo (.def), que requiere agregar el archivo del módulo al proyecto de la biblioteca. El formato es el siguiente:
nombre del proyecto de la biblioteca LIBRARY
EXPORTACIONES nombre de la función de exportación
4. Método de llamada de DLL:
Una llamada estática, el sistema de compilación completa la carga de la DLL y la descarga de la DLL cuando la aplicación termina.
Otro tipo de llamada dinámica, en la que los programadores utilizan funciones API para cargar y descargar DLL (carga de DLL - adquisición de dirección de función DLL - liberación de DLL).
5. Todos los proyectos de biblioteca deben compilarse en modo de lanzamiento:
Compilación: establezca la configuración activa: seleccione el modo de lanzamiento del proyecto de biblioteca
6. :
p>1. Función----Crear biblioteca de vínculos dinámicos (DLL normal de MFC)
1. Nuevo--proyectos--MFC AppWizard(dll)--DLL normal. usando DLL MFC compartida / /Nombrado MFC_dll
2. Agregar en el archivo def: nombre de la función (Add_new)
3. Agregar en el archivo h: declaración de función externa //Función de suma, función. name Add_new
extern "C" __declspec(dllexport) int __stdcall Add_new(int a, int b);
Agregar en el archivo cpp: implementación de función externa
extern "C" __declspec(dllexport) int __stdcall Add_new(int a, int b)
{
return a b;
}
5. build--establecer configuración activa--versión win32--ok
6. Build
7. Se requiere el archivo h del directorio raíz
2. Función ---- llame a la biblioteca de enlaces dinámicos (copie MFC_dll.dll y MFC_dll.lib al directorio donde se encuentra el proyecto)
// Llamada estática (.h se puede escribir en el archivo .cpp)
1. nuevo - proyectos - aplicación de consola win32 - un proyecto vacío
2. file: (test. h)
#pragma comment(lib, "MFC_dll.lib") //Dígale al compilador la ruta y el nombre del archivo lib correspondiente a la DLL
extern "C" _declspec( dllimport) int _stdcall Add_new(int a, int b); //Declarar la función importada
3. Agregar archivo cpp: (main.cpp)
#include "test.h"
int main()
{
coutAdd_new(10,3);
return 0 ;
}
//Llamada dinámica
#include stdio.h
#include windows.h
typedef int (* lpAddFun)( int, int); //Defina un tipo de puntero de función que acepte el mismo tipo de parámetro y valor de retorno que la función Add_new
int main()
{
HINSTANCE hDll; // Manejar
lpAddFun addFun; //Puntero de función
hDll=LoadLibrary("dllTest.dll"); cargando el identificador del módulo DLL
if(hDll)
{
addFun=(lpAddFun) GetProcAddress
(hDll, "Add_new"); //Obtiene la dirección de la función en el módulo DLL cargado
if(addFun)
{
int result= addFun( 2, 3);
printf("d", resultado); } FreeLibrary(hDll); //Libera el módulo DLL cargado
}
devolver 0;
}
3. Variables----Crear una biblioteca de enlaces dinámicos (DLL no MFC)
1. proyectos-- -biblioteca de enlaces dinámicos win32----un proyecto vacío (muestra)
2. Agregar muestra.h
#ifndef SAMPLE_H
#. definir SAMPLE_H
extern int dllGlobalVar;
#endif
3. Agregar sample.cpp
#include "sample.h"
#include windows.h
int dllGlobalVar;
bool APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
// Windows está cargando DLL necesita una función de entrada, al igual que la consola o el programa DOS necesita la función principal, y el programa win32 necesita la función winmain. Así que introduzca una versión funcional del DllMain predeterminado que no haga nada. Es una función interna de la DLL.