Carga de biblioteca de enlaces dinámicos estáticos vs dinámicos

Una DLL (Dynamic Link Library) actúa como una biblioteca compartida de funciones a la que pueden recurrir numerosas aplicaciones y otras DLL. Delphi le permite crear y usar archivos DLL para que pueda llamar a estas funciones a voluntad. Sin embargo, debe importar estas rutinas antes de poder llamarlas.

Las funciones exportadas desde una DLL se pueden importar de dos maneras: declarando un procedimiento o función externa (estática) o mediante llamadas directas a funciones API específicas de la DLL (dinámica).

Consideremos una DLL simple. A continuación se muestra el código para "circle.dll" que exporta una función, llamada "CircleArea", que calcula el área de un círculo utilizando el radio dado:

Una vez que tenga el circle.dll, puede usar la función "CircleArea" exportada desde su aplicación.

Carga estática

La forma más sencilla de importar un procedimiento o función es declararlo utilizando la directiva externa:

Si incluye esta declaración en la parte de interfaz de una unidad, circle.dll se carga una vez cuando se inicia el programa. Durante la ejecución del programa, la función CircleArea está disponible para todas las unidades que usan la unidad donde se encuentra la declaración anterior..

Carga dinámica

Puede acceder a las rutinas en una biblioteca a través de llamadas directas a las API de Win32, que incluyen LoadLibrary, FreeLibrary, y GetProcAddress. Estas funciones se declaran en Windows.pas.

A continuación, le indicamos cómo llamar a la función CircleArea mediante carga dinámica:

Al importar utilizando la carga dinámica, la DLL no se carga hasta la llamada a LoadLibrary. La biblioteca se descarga mediante la llamada a FreeLibrary.

Con la carga estática, la DLL se carga y sus secciones de inicialización se ejecutan antes de que se ejecuten las secciones de inicialización de la aplicación que realiza la llamada. Esto se invierte con carga dinámica.

¿Debe usar estática o dinámica??

Aquí hay un vistazo simple a las ventajas y desventajas de la carga DLL estática y dinámica:

Carga estática

Pros:

  • Más fácil para un desarrollador principiante; no hay llamadas API "feas".
  • Las DLL se cargan solo una vez, cuando se inicia el programa.

Contras: