DLLs Bibliotecas de Enlace Dinmico DynamicLink Library Bibliotecas
DLL’s Bibliotecas de Enlace Dinámico (Dynamic-Link Library)
Bibliotecas Estáticas n Bibliotecas Estáticas q Agregadas en tiempo de compilación (compile-time) n n n q q Compilador carga todos los módulos. Resuelve todas las variables y funciones. Se enlaza todo en el archivo ejecutable final. Tamaño del ejecutable depende de las bibliotecas cargadas. Actualizaciones en las bibliotecas implica tener que recompilar todo el programa. Extensiones típicas . lib, . a Ventaja principal es que programa final no depende de ninguna otra biblioteca.
Bibliotecas Dinámicas n Bibliotecas Dinámicas q q Módulos que contienen funciones y datos (biblioteca). Son cargadas en tiempo de ejecución (run-time) n q Cuando un DLL es cargado, es mapeado en el espacio de direcciones del proceso que lo cargo. n q Quien la carga, puede ser un ejecutable, o bien otra biblioteca dinámica. El espacio de direcciones no es un espacio de memoria física propiamente tal, solo se guardan direcciones de memoria (punteros). Extensiones típicas son: . dll, en Windows y. so (Shared Object), en Unix o GNU/Linux.
Bibliotecas Dinámicas n Ventajas q Reducen el tamaño de los archivos ejecutables. n q Pueden estar compartidas entre varias aplicaciones n q Gran parte del código puede estar almacenado en bibliotecas y no en el propio ejecutable lo que redunda en una mejor modularización. Si el código es suficientemente genérico, puede resultar de utilidad para múltiples aplicaciones (por ejemplo, la MFC es una biblioteca dinámica con clases genéricas que recubren la API gráfica de Windows y que usan gran parte de las aplicaciones). Facilitan la gestión y aprovechamiento de la memoria del sistema. n La carga dinámica permite al sistema operativo aplicar algoritmos que mejoren el rendimiento del sistema cuando se carguen estas bibliotecas. Además, al estar compartidas, basta con mantener una copia en memoria para todos los programas que la utilicen.
Bibliotecas Dinámicas n Ventajas q Brindan mayor flexibilidad frente a cambios. n q Es posible mejorar el rendimiento o solucionar pequeños errores distribuyendo únicamente una nueva versión de la biblioteca dinámica. Nuevamente, esta corrección o mejora será aprovechada por todas las aplicaciones que compartan la biblioteca. Independencia del lenguaje de programación: n n Módulo ya compilado, es independiente del lenguaje que fue creado. Puede ser accedido por programas escrito en otros lenguajes.
Bibliotecas Dinámicas n Desventajas q Problema con el código compartido. Debido a que el código se va compartiendo con otros programas, puede ocurrir las siguientes situaciones: n n Al instalar un programa se reemplaza una DLL por otra versión incompatible Al desinstalar un programa se borra una DLL compartida. En ambos casos los programas que compartan la DLL dejarán de funcionar con los consiguientes trastornos que supone.
Bibliotecas Dinámicas n Posible soluciones a los problemas anteriores. q q q Incorporar el número de versión a las DLLs para evitar sobrescribirlas con versiones incompatibles. Ejemplo: MFC 41. dll y MFC 70. dll en un mismo sistema. Fijar el comportamiento y no permitir modificaciones en el mismo: De esta forma se evitaría la existencia de DLLs no compatibles. Scripts de instalación MSI: se trata de pequeñas bases de datos que indican qué ficheros y versiones instala una aplicación. De esta forma es posible determinar qué versiones son compatibles y cuales no o volver a instalar versiones en el caso de instalaciones corruptas.
Bibliotecas Dinámicas n Funciones Involucradas q Disable. Thread. Library. Calls() n q Dll. Entry. Point() n q Se utiliza para llamar a la funcion una vez que ya se entro en el DLL. Load. Library() y Load. Library. Ex() n q Abre una biblioteca pero no incremeta un contador de referencia que tiene. Similar a Load. Library(). Get. Proc. Address() n q Libera un DLL, pero también cierra la hebra que lo llamó. Get. Module. File. Name() y Get. Module. Handle() n q Libera un DLL’s, liberando así recursos. Free. Library. And. Exit. Thread() n q Funciones de entrada en un DLL, equivale a main() en un programa ejecutable. Free. Library(); n q Deshabilita DLL_THREAD_ATTACH y DLL_THREAD_DETACH. Reduce el espacio de trabajo del programa (en algunos casos). Entrada a un DLL mediante su nombre de archivo. Load. Module() n En vez de abrir un DLL, puede abrir una aplicación o un objeto ya compilado. Similar a Load. Library().
Manejo DLL n 2 Etapas bien definidas q n Creación y Utilización. Creación (Makefile. win) Se compila como cualquier otro programa q dllmain. o: dllmain. c $(CC) -c dllmain. c -o dllmain. o $(INCS) –D BUILDING_DLL=1 Se enlaza diferente dllwrap. exe q $(BIN): $(LINKOBJ) $(DLLWRAP) --output-def $(DEFFILE) --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)
Manejo DLL n Utilización q q No hay que agregar ninguna biblioteca. Archivo DLL debe estar en: n n n En el mismo directorio del ejecutable. En el directorio actual. (Para referencias absolutas) Directorio de sistema system 32 Get. System. Directory() Directorio de sistema system. Directorio de Windows Windows Directorios que estén en la variable de entorno PATH.
Creación n n Se debe crear un proyecto para DLL Dll. Entry. Point(), (Dllmain() en Dev. Cpp) q q Punto de entrada a DLL, similar a main() o Win. Main(). Tres parámetros: instancia, motivo de entrada, reservado. n n n Instancia: sirve para agregar recursos. Motivo de entrada: abriendo o cerrando DLL Reservado: Nulo para cargar/liberar dinámicas y no-Nulo para cargar/liberar estática.
Creación n n Dll. Entry. Point Motivo de entrada (fdw. Reason) q DLL_PROCESS_ATTACH n q DLL_PROCESS_DETACH n q Programa al descargar DLL entra en esta sección de código. Free. Library() DLL_THREAD_ATTACH y DLL_THREAD_DETACH n n Programa al cargar DLL entra en esta sección de código. Load. Library() Carga y descarga desde hebras. Programar funciones y exportarlas (dllexport)
Utilización n n Crear puntero a función a importar Cargar biblioteca dinamica Load. Library() Apuntar a función Get. Proc. Adress() Utilizar funciones importadas Liberar biblioteca dinámica Free. Library()
- Slides: 13