Está en la página 1de 8

Crear dll (librera) en Delphi

Este manual explica, paso a paso y con capturas de pantalla, cmo crear y utilizar una librera (dll)
en Delphi. Os explicamos (con ejemplo incluido) cmo crear un procedimiento en un DLL y cmo
llamar a este procedimiento de la librera desde Delphi y Visua Basic.
Si eres usuario registrado (puedes hacerlo desde aqu gratuitamente) puedes descargar el cdigo
fuente (completo y totalmente gratuito/free) pulsando aqu.
Una DLL Dynamic Linking Library (Bibliotecas de Enlace Dinmico), es un archivo con cdigo
ejecutable que se carga, bajo demanda del programa que lo llama, por parte del sistema operativo.
Contienen funcionalidad o recursos que utilizan otras aplicaciones. Algunas de las ventajas de su
uso:
Reducen el tamao de los archivos ejecutables de la aplicacin.
Pueden estar compartidas entre varias aplicaciones, cuando el cdigo es suficientemente
genrico puede resultar de utilidad para varias aplicaciones.
Facilitan la gestin y aprovechamiento de la memoria del sistema.
Incrementan la flexibilidad frente a cambios.
CREACIN DE DLL EN DELPHI
En primer lugar abriremos Delphi, desde el men "File" - "New" - "Other...":

seleccionaremos "DLL Wizard" y pulsaremos "OK":

El cdigo que nos aparecer por defecto:


library libreriaPrueba;

Pagina 1 de 8

{ 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
SysUtils,
Classes;
{$R *.res}
begin
end.
Podremos aadir formularios, como si de una aplicacin normal se tratara (salvando algunas
excepciones) y procedimientos. Para hacer que los procedimientos puedan ser utilizados por
aplicaciones externas, deberemos aadir la clusula "export" en una lnea de cdigo con "export
nombreProcedimiento" . Por ejemplo, aadiremos un procedimiento que al ser llamado por otra
aplicacin muestre un mensaje con el texto que se le pase como parmetro. Para ello aadiremos el
siguiente cdigo despus de "{$R *.res}":
procedure pruebaMensaje (mensaje : string);
begin
ShowMessage (mensaje) ;
end;
exports pruebaMensaje;
tendremos que aadir al "uses" la unidad "Dialogs" que es donde se encuentra la funcin
"ShowMessage", el cdigo completo quedar as:
library ejemploLibreria;
uses
SysUtils, Classes, Dialogs;
{$R *.res}
procedure pruebaMensaje (mensaje : string); stdcall;
begin
ShowMessage (mensaje) ;
end;
exports pruebaMensaje;
Pagina 2 de 8

begin
end.
guardaremos el proyecto, desde "File" - "Save all":

compilaremos el proyecto, para comprobar errores y generar el fichero .dll, desde el men "Project" "Build nombreProyecto ":

Si no ha habido problemas nos habr creado un fichero .dll el el directorio del proyecto, con el mismo
nombre que el del proyecto, en nuestro caso "ejemploLibreria.dll":

Pagina 3 de 8

UTILIZACIN DE DLL CREADA EN DELPHI


Una vez generada la dll, realizaremos una aplicacin de ejemplo que haga una llamada a la misma y
al procedimiento creado anteriormente "pruebaMensaje". Para ello abriremos Delphi, men "File" "New" - "Application". En el cdigo de la unidad del formulario desde el que queramos utilizar la dll,
aadiremos lo siguiente:
procedure pruebaMensaje (mensaje : string); stdcall external 'ejemploLibreria.dll';
El cdigo completo del formulario ser:
unit UnidadMenuPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
txtMensaje: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
procedure pruebaMensaje (mensaje : string); stdcall external 'ejemploLibreria.dll';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Pagina 4 de 8

begin
pruebaMensaje (txtMensaje.Text);
end;
end.
Por supuesto, si la librera no est en la misma carpeta que el ejecutable que la llama o si no est en
la carpeta del sistema (System32), dar el siguiente error:

con el texto:
--------------------------accesoDLL.exe
No
se
puede
encontrar
el
componente
--------------------------Error al iniciar la aplicacin porque no se encontr ejemploLibreria.dll. La reinstalacin de
la
aplicacin
puede
solucionar
el
problema.
--------------------------Aceptar
--------------------------Para solucionarlo y para que cualquier aplicacin externa pueda utilizar nuestra DLL la copiaremos a
la carpeta del sistema, normalmente ubicada en:
C:/Windows/System32

Si ejecutamos la aplicacin que accede a la DLL obtendremos este resultado:

Pagina 5 de 8

Pagina 6 de 8

UTILIZACIN DE DLL CREADA EN DELPHI DESDE VISUAL BASIC


En este caso hemos utilizado Delphi para realizar la aplicacin que utiliza la DLL creada
anteriormente, pero podramos utilizar las funciones de la DLL con cualquier lenguaje de
programacin. Por ejemplo, para utilizarla con Visual Basic, aadiramos la siguiente lnea de cdigo:
Option Explicit
Private Declare Sub pruebaMensaje Lib "ejemploLibreria.dll" (ByVal mensaje As String)

y en el procedimiento que haga la llamada:


Private Sub Command1_Click()
Call pruebaMensaje(txtMensaje.Text)
End Sub
La aplicacin quedar de la siguiente forma:

y si la ejecutamos:

Pagina 7 de 8

Nota: se ha utilizado la directiva estndar de tipo de llamada "stdcall", porque es la que normalmente
se utiliza, es compatible con cualquier lenguaje.
Si eres usuario registrado (puedes hacerlo desde aqu gratuitamente) puedes descargar el cdigo
fuente (completo y totalmente gratuito/free) pulsando aqu.

Pagina 8 de 8