¿Cuál es el proceso de escritura de archivos DLL en la programación WIN32?
No hace falta decir el papel de Dll, ¿verdad? Las bibliotecas de enlaces dinámicos pueden encapsular datos como funciones, variables, bibliotecas de clases, etc. e implementar llamadas transparentes para uso externo.
1. Encapsule la función en un archivo dll:
Utilice Codeblocks para crear un nuevo proyecto de biblioteca de vínculos dinámicos llamado testDll. De forma predeterminada, habrá un archivo .cpp y un archivo .h. generado Hay un código básico, modificado de la siguiente manera:
main.h
#ifndef __MAIN_H__
#define __MAIN_H__
#i. nclude
#i nclude
#i nclude
/**//* Para use esta función exportada de dll, incluya este encabezado
* en su proyecto.
*/
#ifdef BUILD_DLL
#define DLL_EXPORT externo " C" __declspec(dllexport)
#else
#define DLL_EXPORT externo "C" __declspec(dllimport)
#endif
DLL_EXPORT int addxy( int a, int b );
#endif // __MAIN_H__ Tenga en cuenta que se debe agregar "C" externa al definir DLL_EXPORT; de lo contrario, no se encontrará la función.
main.cpp:
#i nclude "main.h"
//prueba aquí
DLL_EXPORT int addxy( int a , int b )
...{
return (a+b);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL , DWORD fdwReason, LPVOID lpvReserved)
...{
cambiar (fdwReason)
...{
caso DLL_PROCESS_ATTACH:
// adjuntar al proceso
// devuelve FALSE si falla la carga de DLL
break;
case DLL_PROCESS_DETACH:
// separar del proceso
break;
case DLL_THREAD_ATTACH:
// adjuntar al hilo
break; p> p>
case DLL_THREAD_DETACH:
// separar del hilo
break;
}
return TRUE; / exitoso
}
La función addxy es la función de prueba que definí, y la declaración DLL_EXPORT agregada anteriormente es la descripción de la función definida en main.h.
Luego seleccione Liberar como tipo de compilación. Después de pasar la compilación, se genera un archivo de biblioteca de enlace dinámico de testDll.dll en el directorio bin/Release. Si selecciona Depurar como tipo de compilación, las funciones compiladas serán extrañas. Esto se puede ver en los archivos libtestDll.def en las carpetas Release y Debug respectivamente.
Utilice el comando dumpbin proporcionado con VS2005 para ver el contenido de libtestDll.dll:
Ingrese dumpbin /exports testDll.dll para ver el siguiente resultado:
D:My DocumentswxWidgets estcallDll>dumpbin /exports testDll_r1.dll
Microsoft (R) COFF/PE Dumper Versión 8.00.50727.42
Copyright (C) Microsoft Corporation Todos los derechos reservados.
Dump. del archivo testDll_r1.dll
Tipo de archivo: DLL
La sección contiene las siguientes exportaciones para testDll.dll
00000000 características
477CD664 tiempo sello de fecha jueves 03 de enero 20:34:44 2008
versión 0.00
1 base ordinal
1 número de funciones
1 número de nombres
pista ordinal nombre RVA
1 0 00001180 addxy
Resumen
1000 .bss
1000 .data
1000 .edata
1000 .idata
1000 .rdata
1000 .reloc
1000 .text Desde donde puede ver la función addxy que definimos.
Hasta ahora, la biblioteca dinámica está completa.