Anuncio

Colapsar
No hay anuncio todavía.
X
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Crear una DLL 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 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
    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.

  • #2
    Gracias a FPSlatino e aprendido muchas cosas te lo agradezco administrador Aepyro por la oportunidad que me as dado como aspirante a moderador.
    ▒█▀▀▀ ▒█▀▀█ ▒█▀▀▀█ ▒█░░░ ░█▀▀█ ▀▀█▀▀ ▀█▀ ▒█▄░▒█ ▒█▀▀▀█  
    ▒█▀▀▀ ▒█▄▄█ ░▀▀▀▄▄ ▒█░░░ ▒█▄▄█ ░▒█░░ ▒█░ ▒█▒█▒█ ▒█░░▒█
    ▒█░░░ ▒█░░░ ▒█▄▄▄█ ▒█▄▄█ ▒█░▒█ ░▒█░░ ▄█▄ ▒█░░▀█ ▒█▄▄▄█

    Comentario


    • #3
      4fklermsgopsmeplsdgkmselrbldfb

      Comentario

      Trabajando...
      X