Red de conocimiento informático - Material del sitio web - ¿Cuál es el proceso de escritura de archivos DLL en la programación WIN32?

¿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>

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.