COMO HACER UNA LIBRERIA DLL - .: .: Saiyine :. :.

Como hacer una libreria DLL

Por Saiyine Enviar correo el 2001-01-01 00:00:00 - Secciones:  DELPHI  - Enlace permanente: 445

library EjemploDLL;

uses
SysUtils,
Classes,
dialogs;

procedure Hola; stdcall; export;
begin
        ShowMessage('Holaaaaaaaa');
end;

exports Hola;
end.

Este es un ejemplo de DLL muy simple, que solo contiene el procedimiento Hola. Como podeis ver hay al menos tres diferencias con un programa normal:

1/ library EjemploDLL; ---> Para indicar al compilador que es una libreria

2/ procedure Hola; stdcall; export; ---> Con esas dos palabras indicamos que ese procedimiento se puede usar por otro programa.

3/ exports Hola; ---> Dejamos claro que es lo que queremos exportar.

Luego, para usarla solo tenemos que hacer: (haz un programa con dos botones para el ejemplo)

procedure Hola; external 'EjemploDLL.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
        Hola;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
hMod : THandle;
HelloWorld : procedure;
begin
        hMod := LoadLibrary('EjemploDLL.dll');
        if (hMod = 0) then Exit;
        @Hola := GetProcAddress(hMod, 'Hola');
        if @Hola  nil then Hola;
        FreeLibrary(hMod);
end;

El segundo metodo es bastante mas complicadillo, pero permite mucho mas control en plan dar un error si el DLL no se encuentra y cosas asi.

Por cierto, los DLL se pueden ejecutar (lease, 'el windows los encuentra') cuando estan en:

1/ El mismo directorio que el ejecutable

2/ En el directorio de windows (C:\windows normalmente)

3/ En el directorio de sistema de windows (C:\windows\system normalmente)

4/ En los directorios señalados por la variable de sistema PATH

Deberia haber una tercera forma para llamar a las funciones de un dll, en realidad es una variante de la segunda, que es guardar el dll dentro de los resources del ejecutable y luego leerlo en tiempo de ejecucion, pero no consigo hacerlo sin pasar por el disco (en el momento en que el dll se escribiese en el disco estariamos haciendo la version dos de la llamada)... esto que puede parecer un rollo tiene su utilidad, con esto podrias hacer programas que practicamente no dieran problemas de pantallazos azules.

Otras entradas de la web que podrian interesarte:

Gravatar 82
Banderita Juan Carlos Mercado (2005-11-19 12:55:00)

Te escribo porque se me hace interesante el tema, ya que por mucho tiempo he estado interesado en aprender como hacer librerías DLL, pero de momento lo que me interesa es hacer una que sea capaz de manejar el puerto paralelo, para comunicarse con una interfaz, ya he visto algunas hechas, pero quisiera elaborar una con ciertas caracteristícas que me interesan, no se si esto se pueda hacer en delphy, porque solo lo he visto con "C", o si es que se pueden hacer con Visual Basic.
Saludos y gracias por anticipado.

Disculpa las faltas, es solo que no manejo muy bien el Español, apenas llevo 6 años usandolo, hasta luego

Sin gravatar 2584
Banderita Anonimo (2008-08-05 12:25:49)

:( :) :? :D xD^^;):| :x :o :P 8) 8O :noworry: :roll: :huh: :push: :OO

Sin gravatar 3470
Banderita Anonimo (2009-06-15 05:58:27)

Se pueden crear librerías dll en cualquier lenguaje de programación?

Gravatar 3471
Banderita Saiyine (2009-06-15 06:16:38)

Hombre, en cualquiera no, pero en los principales de Windows si.

En general, supongo que cualquiera que pueda crear ejecutables de Windows, podrá crear tambien librerias.

Gravatar 4028
Banderita MRLS (2009-12-02 02:05:48)

Hola, yo trabajo con Java y pude generar una dll a partir de un método nativo para limpiar pantalla, eso fue con C, ahora quiero hacer lo mismo pero con código en ensamblador. ¿Cuál es la forma de crear una dll con código ASM puro sin pasar por C? (Si es que esto se puede hacer)

Sin gravatar 4556
Banderita Anonimo (2010-06-20 10:53:06)

<script>alert('No me sirvio de nada;)');</script>

Sin gravatar 4557
Banderita Anonimo (2010-06-20 10:53:48)

<script>alert('No me sirvio de nada');</script>

o o o o 


Tu nombre (Nick):

Tu correo (Email):
  Necesario para tu gravatar!

Tu página (URL):

Escribe aqui tu comentario:

       :noworry: :roll: :huh: :push: :OO 8) 8O :( :) :? :D :P :o :x :| ;) ^^ xD



Vista previa activada.

Vista previa (6/6/6, 6:66)


Fondos de pantalla

. . .


Menuda oferta, ¿un pendrive Verbatim de 16Gb por solo 8,99€???

Descargas

  • ApagaPC
    apagapc241.exe  (4488)
  • LimpiaDocus
    LimpiaDocus001.exe  (3792)
  • RCM
    rcm001.zip  (3200)
  • Popmail
    popmail-0.4-psmn.tar.gz  (3272)
  • Manual de Delphi en PDF
    delphi_pdf.zip  (3904)
  • Evangelio del Perl
    Evangelio_del_perl.pdf  (3983)
  • Excel Simpsons
    Excel Simpsons  (3914)
  • . . .

    ltimos comentarios

  • 481 - Alvareto: Buenas, Lino... el procedimiento: Justifica(ListBox1.Items,ListBox1.font,ListBox1.width); lo ubicas también en el BeforePrint o...
  • 920 - jftc: jftc es lo maximo
  • 920 - Anonimo: exelente gracias por la ayuda :D...
  • 877 - Anonimo: parpadeen muchas veses y veran que se mueve ...
  • 920 - Anonimo jaja: jjaj buena la pag me sirvio para comprar muchas cosas...
  • 924 - Anonimo: muy bueno. saludos.
  • . . .

    Proyectos Online

  • Saiyine Store
  • Kunowalls!!!
  • Fondos de pantalla
  • Picaday: imagenes sexys o chocantes.
  • Scarlett: fotos de Scarlett Johansson
  • WhatsmyIP: obtener tu IP pública
  • Uma Thurman: galeria de Uma Thurman
  • FunPics: imagenes graciosas
  • . . .

    Blogs

  • Por lo que más querais, no entreis a estos: Tapanez, Yhandros, Onez.

  • Otros en español: El Mundo Today, La libreta de Van Gaal, Chavalina, Kirai, Mundo Geek, Microsiervos.

  • Mis lecturas en guiri: Michael Yon, Coding Horror, YCombinator news, MySQL Performance, Slashdot.

    . . .
  • Utilidades

  •  Coral  (1645), cacheando webs
  •  Spam.la  (1983), correo de usar y tirar
  •  Mailinator  (1887), correo de usar y tirar
  •  Bug me not  (1635), absurdos registros di NO
  •  Trashmail  (1692), correo de usar y tirar

    . . .

  • Página web ©2001-2011 Saiyine descargada en s, con 6094785 visitas en total, hoy (de un total de 0 previstas).

    . . .