Usualmente las bibliotecas dinámicas (DLLs) se cargan a memoria de dos formas desde nuestro programa: Implícitas y explicitas.
Las implícitas se declaran de manera muy simple, pero deben estar presentes al momento de iniciar el programa. Si no lo están, la carga del ejecutable falla completamente.
Las explicitas no tienen esa limitante y el programa puede cargarse, buscar la dll cuando haga falta y reaccionar adecuadamente a su ausencia. El precio que se paga es que hay que escribir un poco mas de código para conseguirlo.
A partir de Delphi 2010, existe una tercera forma de declarar las funciones de una DLL: delayed, que nos ofrece mayor simplicidad en la declaración y la capacidad de reaccionar ante la ausencia de la DLL. En este primer artículo de la serie veremos como declarar y utilizar las funciones de una DLL de esta manera.
La idea principal de la nueva palabra delayed es el hecho que la DLL no se cargará al arrancar el programa (como en el caso de la declaración implícita), sino la primera vez que se necesite. La sintaxis es muy similar a la declaración de funciones para carga implícita, con la excepción que se añadirá la palabra delayed antes del punto y coma (luego del nombre de la DLL).
Tomando un ejemplo de Dr. Bob, les dejo primero el código fuente de la DLL que se utilizará en el ejemplo:
library eBob42; function Add(X,Y: Integer): Integer; overload; stdcall; begin Result := X + Y end; function Add(X,Y: Double): Double; overload; stdcall; begin Result := X + Y end; exports Add(X,Y: Integer) name 'Add', Add (X,Y: Double) name 'AddFloat'; end.
Ahora, la declaración de las funciones para realizar la carga retardada sería la siguiente:
unit eBob42Delayed; interface const DLL = 'eBob42.DLL'; function Add(X,Y: Integer): Integer; overload; stdcall external DLL delayed; function Add(X,Y: Double): Double; overload; stdcall external DLL name 'AddFloat' delayed; implementation end.
Al compilar esta unidad, el compilador nos alerta (warnings) que esta característica es específica de la plataforma Win32.
En una siguiente entrega veremos como reaccionar al hecho de que la DLL no se encuentre en tiempo de corrida.



