Skip to content

Como crear una DLL en Delphi (Parte 1)

Como ya sabemos, un archivo DLL (abreviatura de Dynamic Link Library), es un biblioteca que contiene código, que puede ser utilizado por cualquier otro programa, y no solo uno sino por todos los programas que quieras al mismo tiempo.

Con Delphi, no solo podemos crear aplicaciones VCL o FMX, sino como venimos viendo en esta web, podemos crear carios tipos de sistemas, entre ellos los archivos dll, librería o bibliotecas.

Cuales son las ventajas de una DLL

  • Se utilizan menos recursos: Cuando el código de una librería es utilizado por muchos programas, evitamos la duplicación de código que se carga en memoria, agilizando rendimientos muy importantes en nuestro sistema.
  • Fácil instalación, implementación y actualización: Cuando el código que se encuentra dentro de una DLL necesita una actualización, su implementación e instalación es sumamente sencilla, ya que con actualizar ese archivo es suficiente y no necesitamos volver a vincular nuestro sistema ni modificar nada de él.
  • Se promueve la arquitectura modular: Con el uso de archivos DLL, estamos desarrollando una arquitectura modular, por ejemplo, muy útil para grandes programas que requieren versiones con diferentes idiomas.

Crear un archivo DLL en Delphi

Para crear un archivo DLL en Delphi, debemos crear un nuevo proyecto en File -> New – Other -> Delphi -> Dynamic Library, como mostramos en la siguiente imagen:

File -> New - Other -> Delphi -> Dynamic Library

Una Vez creado el proyecto, Delphi nos crea un archivo .dpr con el mismo nombre del proyecto, en nuestro caso le llamé “delphidesdecero.dpr”, el cual contiene el siguiente código base para la creación de una DLL:

library delphidesdecero;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  System.SysUtils,
  System.Classes;

{$R *.res}

begin

end.

Con este código vamos a comenzar a crear nuestra primer DLL, es más si compilamos este código ya nos creará un archivo DLL, pero sin ninguna función que podamos utilizar, estará vacía.

NOTA: Con respecto al comentario que nos muestra Delphi en el código, nos quiere decir que si utilizamos parámetros de tipo cadena, debemos colocar la clausula ShareMem en primer lugar de los uses, y colocar la librería BORLNDMM.DLL e el mismo directorio de nuestra DLL, de lo contrario, deberemos utilizar parámetros de tipo PChar o ShortString para no tener que utilizar la DLL BORLNDMM.DLL.

Exportando nuestra primera función

Ahora lo que queremos tener, es código que se pueda utilizar desde otros programas, para ello vamos a exportar nuestra primera función.

En primer lugar vamos a crear una función sencilla, una función que sume dos números enteros. Antes del begin creamos la siguiente función:

function Suma(const a, b: integer): integer;
begin
  Result := a + b;
end;

exports
  Suma;

begin
end.

El código completo de nuestra primer DLL quedaría de la siguiente manera:

library delphidesdecero;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  System.SysUtils,
  System.Classes;

{$R *.res}

function Suma(const a, b: integer): integer;
begin
  Result := a + b;
end;

exports
  Suma;

begin
end.

Seguir en como crear una DLL en Delphi Parte 2.