Las DLL

Las DLL (Dynamic Link Library) son librerias de subprogramas que implementan funciones muy utilizadas por los programas. De esta forma no es necesario codificar estas funciones en los programas basta con llamarlas.

Por ello las DLL en general son compartidas por dos o más programas.

En general cualquier rutina o subprograma puede ser llamada o cargada en tiempo de compilación , llamada estática, o en tiempo de ejecución, llamadas dinámica. Esta es la forma en que se llaman las DLL.

Las llamadas estáticas tiene la ventaja de que se incorpora el código en tiempo de compilación de los programas. Si bien se ejecuta más rápido el programa no puede actualizarse el subprograma y el programa resultante es de gran tamaño. Los programas JAVA usan llamadas estáticas con el fin de que se puedan ejecutar en cualquier entorno.

Las llamadas dinámicas tienen el inconveniente de que el programa se ejecuta más lentamente, pero las ventajas de que su tamaño es menor y su actualización más sencilla pues basta con copiar las nuevas DLL en la librería en la que se encuentran.

Por ello las DLL tienen versiones.

 

DLLS en Windows

Las DLL que usamos en Windows pueden ser de Microsoft o de otros desarrolladores de software.

MANTENIMIENTO

¿Qué versión de una DLL tengo?

Priero debemos de buscar en que carpeta se encuentra con el “Administrador de de Windows”, y después basta con pulsar el botón derecho y seleccionar el menú “Propiedades”.

Hay programas como AUDITDLL (http://www.pcprofile.com/ ) que recorren todo el sistema para crear una base de datos con la información de todas las DLL y su versión.

Falta DLL

Con frecuencia nos aparece el mensaje “DLL not found”, “Missing DLL” o “Falta DLL” cuando vamos a ejecutar una DLL. Esto puede deberse a varios motivos:

Para solucionarlo hay que:

Instalo una DLL y el sistema no la reconoce

Hay que ejecutar el comando de DOS regsvr32

EJEMPLO DE UN PROGRAMA DE ARCHIVOS DLL

#ifndef _DLL_VERSION_H_
#define _DLL_VERSION_H_
#ifndef DLLVERSIONINFO
typedef struct _DllVersionInfo
{
DWORD cbSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformID;
}DLLVERSIONINFO;
#endif
#ifndef DLLGETVERSIONPROC
typedef int (FAR WINAPI *DLLGETVERSIONPROC) (DLLVERSIONINFO *);
#endif
class CDLLVersion
{
typedef enum { WIN_DIR, // Windows directory (e.g.: "C:\Windows\")
SYS_DIR, // Windows system directory (e.g.: "C:\Windows\System")
CUR_DIR, // Current directory (e.g.: ".")
NO_DIR} // No directory (path in file name)
FileLocationType; // Possible ways to add a path prefix to a file
public:
CDLLVersion (LPSTR szDLLFileName) :
m_dwMajor (0),
m_dwMinor (0),
m_dwBuild (0)
{
m_bValid = GetDLLVersion (szDLLFileName, m_dwMajor, m_dwMinor, m_dwBuild);
}
virtual ~CDLLVersion () {};
DWORD GetMajorVersion ()
{
return m_dwMajor;