Está en la página 1de 2

CMO SE HACE UNA DLL EN MS WINDOWS

Hay bastantes formas de hacer una DLL en MS Windows. Casi tantas como lenguajes y entornos de programacin existen para construir aplicaciones en MS Windows. Aqu nos referiremos exclusivamente al Entorno Visual Studio 5 de Microsoft y a los lenguajes C y C++. Ni que decir tiene que, de este modo, las DLL que creemos sern bajo el estndar Win32, no soportndose la posibilidad de crear otro tipo de DLL incluidas las Win16. Para crear una DLL en este entorno hay que seguir una serie de pasos, que de una forma resumida son los siguientes: Crear un nuevo proyecto. Dentro de los posibles tipos de proyecto, hay que seleccionar Win32 Dynamic-Link Library.
1.

Una vez creado el proyecto, se dispondr de dos ficheros: uno .cpp que es donde se implementarn las funciones de la DLL y otro .h que debe contener las cabeceras de las funciones que se quieran exportar.
2.

De este modo, lo nico que falta por hacer es rellenar las cabeceras en el .h declarndolas como exportables para que sean utilizadas en la confeccin de la DLL y a su vez declarndolas importables para que puedan ser usadas por aqullos que quieran utilizar la DLL. Una forma elegante de hacer esto es realizar una definicin parecida a sta: #ifdef _GENERAR_DLL_PULSADORES_ # define DllExport __declspec(dllexport) #else # define DllExport __declspec(dllimport) #endif As, por cada cabecera que se declare, hay que poner DllExport al principio. Por ejemplo: DllExport bool EstadoPulsador(short, LPBOOL, double*);
3.

Cuando se implementen las funciones .cpp, antes de incuir el .h hay que poner la siguiente diretiva: #define _GENERAR_DLL_PULSADORES_ De este modo conseguiremos exportar las funciones.
4.

5. Aunque ya no es necesario en las DLL de Win32, se puede implementar la funcin: BOOL APIENTRY DllMain (HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved); Esta funcin va a ser llamada automticamente por cualquier programa que cargue automticamente la librera. La llamada podr producirse en dos ocasiones, una en la carga de la librera, siendo entonces el parmetro ul_reason_for_call = ul_reason_for_call: DLL_PROCESS_ATTACH y otra cuando se descarga la librera, en este caso, con el parmetro ul_reason_for_call = DLL_PROCESS_DETACH.

CETTICO

Hay dos formas de acceder a las funciones de una DLL: La primera y mas sencilla consiste en incluir el .h con las cabeceras que se utilizaron para generar la DLL. Ni que decir tiene que no hay que definir _GENERAR_DLL_PULSADORES_ (en nuestro caso) para que las cabeceras se importen correctamente. Adems de estas cabeceras es necesario declarar que se desea linkar el .lib que se gener con la .DLL en su momento. Esto es imprescindible, pues este .lib contiene las llamadas al sistema para conseguir enlazar correctamente las funciones a las que se llama desde el mdulo que genera la librera.
1.

La segunda forma es declarando los tipos de las funciones que se quieren utilizar a pelo e importarlos ayudndose de las funciones LoadLibrary (para cargar la librera) y GetProcAddress por cada funcin que se desee utilizar. De esta forma no hay que utilizar el .lib pero es bastante engorroso y difcil de entender, sobre todo al declarar los tipos as como al importar una a una las funciones que se utilizarn. La ventaja de este mtodo es que se obtiene ms control en el manejo de la DLL.
2.

CETTICO