Publicidad

jueves, 29 de mayo de 2008

librería dinámica (DLL) en un programa C++

Hola, pues aqui les dejo informacion acerca de librerias estaticas y dinamicas, espero que les sirva.

*** Utilización de librerías estáticas. Es el método tradicional. Son las clásicas colecciones de ficheros objeto .obj (compilados), que en el momento de la construcción de la aplicación, son incluidos por el "Linker" en el propio ejecutable.
*** Utilización de librerías dinámicas. En esta modalidad, los recursos ocupan un fichero independiente del ejecutable, que puede ser utilizado por cualquier aplicación que lo necesite. En algún momento, durante la carga del ejecutable, o posteriormente, en run-time, el ejecutable deberá integrar este bloque de código en su propio espacio, de forma que pueda acceder a los recursos contenidos en él.
Las DLLs son trozos de código capaz de realizar determinadas operaciones, cuya "funcionalidad" puede ser utilizada desde otros ejecutables, y como puede verse, ocupan una posición intermedia (diríamos que una solución de compromiso) entre las posiciones extremas antes citadas. Con las librerías estáticas comparten la característica de que es un trozo de código que acaba siendo incluido en el espacio del ejecutable que las utiliza.
la DLL no es cargada en el espacio de memoria del ejecutable, sino que tiene su propio espacio. Lo que ocurre es que este espacio es accesible desde el ejecutable, y está "mapeado" en él. Es decir, en el ejecutable existe un cierto "mapa" de cómo está distribuida esa zona de memoria.
En realidad lo que caracteriza a una DLL es la forma en que es traída a ejecución; no directamente desde el shell del Sistema como un ejecutable .exe normal, sino desde otro ejecutable (que puede ser incluso otra DLL), de forma parecida a como se invoca una función (una especie de función externa al programa).
Cargar en memoria el contenido de la DLL utilizando un espacio accesible desde el ejecutable que la utiliza. Esto puede efectuarse de dos formas:
1.- En el mismo momento de la carga inicial del programa: las DLLs requeridas por el ejecutable .EXE son cargadas, y sus objetos inicializados por el módulo de inicio como cualquier otro módulo del programa. Es decir, que serán inicializadas antes que comience la ejecución de main. Cuando la aplicación es cargada por el SO, este mira en el fichero .EXE para ver que DLLs se necesitan, y se encarga de cargarlas también. Enlazado implícito.
2.- En el momento en que se necesite alguno de sus recursos (en runtime): la librería es cargada en runtime cuando la aplicación lo necesita. Esta forma de uso se denomina enlazado dinámico o explícito (librería dinámica enlazada dinámicamente). Para realizar la carga, el programador dispone de algunas funciones de la API de Windows que se encargan de realizar la tarea cuando él lo decide (de ahí que se denomine enlazado explícito).

Si en una carga implícita el Sistema no encuentra el fichero .DLL en ninguno de los sitios anteriores, se muestra un mensaje de error y la aplicación no puede ejecutarse.
En caso de que fracase la carga del fichero durante la carga explícita, si el Sistema devuelve un error, es potestad del programador decidir que hacer.

1 comentario:

Rafa solano dijo...

Creo que si hubiera leído antes esta entrada hubiera podido contestar al profe en clase, pero gracias por publicar esta información, me ayudo a entender mejor lo de las librerías dinámicas y estáticas...