Anda di halaman 1dari 15

DLL: Dynamic Linking Library

SESION 15 : CARGA DE
LIBRERIAS DINAMICAS
Programacion de una DLL
Una librera de enlace dinamico contiene informacin de
rutinas, colecciones, utilidades para mltiples programas
incluso hasta aplicaciones completas.

Formato ejecutable precompilado con extension dll
Contenido: cdigo, datos, recursos

Para el uso de una biblioteca en un programa, es
necesario conocer los prototipos (headers) de la
rutina.
Las bibliotecas se distribuye con un archivo de encabezado
(extension h en codigo fuente, LIB en codigo compilado)
que contiene los prototipos y se importa en los IDEs de
programacion .
En C / C + + directiva para importar un archivo de cabecera
es # include
Para la ejecucin del programa de las bibliotecas debe estar
vinculado (linking) al cdigo ejecutable.
Conexion Static/Dynamic
Static linking
La conexin se realiza en tiempo de compilacin,
en decir cuando estamos en el IDE e insertamos los
componentes manualmente o mediante un framework.
Los extractos de las rutinas de biblioteca son utilizados
y adjuntados al cdigo ejecutable del programa
Ejemplo: las bibliotecas de C Runtime (stdio.h,
stdlib.h, ...)
Hay un ejemplo de la rutina para cada programa que
utilice.

Dynamic linking libraries (DLL)
La conexin se realiza en tiempo de ejecucin
El cdigo de las rutinas no est unido al programa,
pero se carga por separado antes de utilizar las
funciones.
Se carga una sola vez en el sistema operativo, luego
las funciones son reutilizadas por las aplicaciones.
El Porque de las DLL en Windows
Comprimir cdigo: ahorra espacio en disco y memoria
para aplicaciones.
Inicialmente fue elegido para permitir que Windows pueda trabajar
con poca memoria, mientras que el lanzamiento de varios
programas al mismo tiempo (multitasking) WinAPI esta contenido
casi por completo en solo 3 dlls KERNEL32.DLL, USER32.DLL,
COMCTL32.DLL

Modularidad
Hacer un cambio en el cdigo compartido por varias aplicaciones
slo impacta en la DLL correspondiente (ms fcil de instalar los
service packs), es por ello que las actualizaciones solo distribuyen
archivos DLL.
Simplifica el despliegue de la actualizacin del sistema de Service
Pack
Extensibilidad dinmica del sistema
Es ms fcil aadir nuevos mdulos (pluging) para las aplicaciones
heredadas

Pero hay que tener cuidado ... el problema del Hell DLL"
Los conflictos entre las diferentes aplicaciones que utilizan
versiones diferentes de la misma DLL, por ejemplo si la funcion
mantiene su nombre pero cambia su funcionalidad y hay 2
aplicaciones que la usan, sera dificil que las 2 funcionen bien al
mismo tiempo
El Corazon de Windows
Las DLL pasan a ser entonces el contenedor de
cdigo ejecutable reutilizable, por todas las
aplicaciones windows.
Exportar datos y procesos de cdigo
contenidos en stacks comunes entre
aplicaciones.
Static linking (ejemplo)
Para C++ 2005 Express Edition
New project
Win32 console application
En las opciones seleccionar Static library
Para implementar la libreria:
En el archivo de cabecera exportar la funcion
En el cuerpo implementar la funcion

Dynamic linking (Ejemplo)
En C++ Builder
New project, other
Dinamic Link Library
Para implementar una DLL
Archivo de encabezado que declara los prototipos de
funciones exportadas
Archivo de implementacin correspondiente
Archivo que contiene el punto de entrada de la DLL
Similar a la aplicacin principal, se encarga de la
inicializacin DLL operaciones
(Opcional) encabezado del archivo que declara los
prototipos de funciones no exportan
Exportar funciones
Metodo general
utilizar un archivo .def (Module Definition file)

Metodo Microsoft solo bajo windows.
Se debe utilizar las clausulas
__declspec(dllexport)
__declspec(dllimport)


Dynamic linking (Ejemplo)
Sintaxis de llamada
Determinar la forma en que se almacenan
los parmetros y leer desde la pila.
La convencin de llamada estndar es __
stdcall o __declspec, que corresponde a las
siguientes convenciones:
La llamada de funcin tiene la responsabilidad
de limpiar la pila
Los parmetros se transfieren en orden de
derecha a izquierda, tener cuidado en strings
El nombre de la funcin est "decorado" para
evitar encontrarse con funciones con el mismo
nombre: _ como un prefijo y un sufijo, ms el
nmero de bytes de los parmetros de
Uso de una DLL
Normalmente en tiempo de compilacin.
El programa de usuario incluye el archivo de
cabecera (*.h, o LIB) que declara los
prototipos de las funciones exportadas de la
DLL
El programa de usuario es conectado a un
archivo. Lib generado cuando se crea el
archivo DLL
Similar a una biblioteca esttica, pero slo
contiene la informacin para cargar la DLL
(no la aplicacin de las funciones exportadas)
La DLL debe estar disponible en tiempo de
ejecucin
En la misma carpeta
Carpetas del sistema
Carpetas especificadas por la variable de
entorno PATH
Uso de una DLL
En tiempo de ejecucin archivo EXE
No tiene que incluir una cabecera, o conectar
cualquier fichero lib
La carga se gestiona directamente desde el
programa
proceso
Definir los prototipos para ser usados como
punteros a funciones
Cargar la DLL directamente desde el sistema
de archivos (LoadLibrary)
Tire de las funciones a ser utilizados por el
archivo DLL (GetProcAddress)
Gestin de errores LoadLibrary y
GetProcAddress
Suelte la biblioteca despus de su uso
(FreeLibrary)
Uso de una DLL
Generacin del Archivo LIB
Load-time vs. Run-time
1. Al cargar en tiempo de ejecucin no hay
necesidad de tener la biblioteca de importacin
LIB de la DLL para utilizarla
1. Si a pesar de conocer las funciones que deben utilizarse
y sus parmetros
2. Sin embargo, puede utilizar funciones que no estn
explcitamente documentadas

2. Exception handling
Al cargar en tiempo de ejecucin se puede controlar las
excepciones relacionadas con la falta de (o incapacidad
de encontrar) un archivo DLL

3. Performance
Al cargar un cdigo en tiempo de carga es ms sencillo y
un poco ms rpido (no se invoca GetProcessAddress ni
se cargan librerias)

Anda mungkin juga menyukai