Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

Programación: Creación y acceso a DLL (Librería) con Delphi
Delphi


Este manual explica, paso a paso y con capturas de pantalla, cómo crear y utilizar una librería (dll) en Delphi. Os explicamos (con ejemplo incluido) cómo crear un procedimiento en una DLL y cómo llamar a este procedimiento desde una aplicación externa en Delphi y Visual Basic.



Crear dll (librería) en Delphi

Crear dll (librería) en Delphi

Este manual explica, paso a paso y con capturas de pantalla, cómo crear y utilizar una librería (dll) en Delphi. Os explicamos (con ejemplo incluido) cómo crear un procedimiento en un DLL y cómo llamar a este procedimiento de la librería desde Delphi y Visua Basic.

Si eres usuario registrado (puedes hacerlo desde aquí gratuitamente) puedes descargar el código fuente (completo y totalmente gratuito/free) pulsando aquí.

Una DLL ó Dynamic Linking Library (Bibliotecas de Enlace Dinámico), es un archivo con código 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 tamaño de los archivos ejecutables de la aplicación.
  • Pueden estar compartidas entre varias aplicaciones, cuando el código es suficientemente genérico puede resultar de utilidad para varias aplicaciones.
  • Facilitan la gestión y aprovechamiento de la memoria del sistema.
  • Incrementan la flexibilidad frente a cambios.

CREACIÓN DE DLL EN DELPHI

En primer lugar abriremos Delphi, desde el menú "File" - "New" - "Other...":

seleccionaremos "DLL Wizard" y pulsaremos "OK":

El código que nos aparecerá por defecto:

library libreriaPrueba;

{ 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 añadir formularios, como si de una aplicación normal se tratara (salvando algunas excepciones) y procedimientos. Para hacer que los procedimientos puedan ser utilizados por aplicaciones externas, deberemos añadir la cláusula "export" en una línea de código con "export nombreProcedimiento" . Por ejemplo, añadiremos un procedimiento que al ser llamado por otra aplicación muestre un mensaje con el texto que se le pase como parámetro. Para ello añadiremos el siguiente código después de "{$R *.res}":

procedure pruebaMensaje (mensaje : string);
begin
  ShowMessage (mensaje) ;
end;


exports pruebaMensaje;

tendremos que añadir al "uses" la unidad "Dialogs" que es donde se encuentra la función "ShowMessage", el código completo quedará así:

library ejemploLibreria;

uses
  SysUtils, Classes, Dialogs;

{$R *.res}

procedure pruebaMensaje (mensaje : string); stdcall;
begin
  ShowMessage (mensaje) ;
end;

exports pruebaMensaje;

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":

UTILIZACIÓN DE DLL CREADA EN DELPHI

Una vez generada la dll, realizaremos una aplicación 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 código de la unidad del formulario desde el que queramos utilizar la dll, añadiremos lo siguiente:

procedure pruebaMensaje (mensaje : string); stdcall external 'ejemploLibreria.dll'; 

El código 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);
begin
  pruebaMensaje (txtMensaje.Text);
end;

end.

Por supuesto, si la librería 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 aplicación porque no se encontró ejemploLibreria.dll. La reinstalación de la aplicación puede solucionar el problema.
---------------------------
Aceptar
---------------------------

Para solucionarlo y para que cualquier aplicación externa pueda utilizar nuestra DLL la copiaremos a la carpeta del sistema, normalmente ubicada en:

C:/Windows/System32

Si ejecutamos la aplicación que accede a la DLL obtendremos este resultado:

UTILIZACIÓN DE DLL CREADA EN DELPHI DESDE VISUAL BASIC

En este caso hemos utilizado Delphi para realizar la aplicación que utiliza la DLL creada anteriormente, pero podríamos utilizar las funciones de la DLL con cualquier lenguaje de programación. Por ejemplo, para utilizarla con Visual Basic, añadiríamos la siguiente línea de código:

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 aplicación quedará de la siguiente forma:

y si la ejecutamos:

Nota: se ha utilizado la directiva estándar 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 código fuente (completo y totalmente gratuito/free) pulsando aquí.


Anuncios


Enviado el Sábado, 20 enero a las 17:16:58 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A