elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Manual de como crear archivos dll y como utilizarlo desde un exe en dev c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Manual de como crear archivos dll y como utilizarlo desde un exe en dev c++  (Leído 14,488 veces)
P[i]


Desconectado Desconectado

Mensajes: 472


Ver Perfil
Manual de como crear archivos dll y como utilizarlo desde un exe en dev c++
« en: 15 Octubre 2005, 14:16 pm »

 Ma burria y me puse a crear esto, bueno espero que le ayude a alguien:
1º) Abrimos un nuevo proyecto de tipo dll, en c. Ponle un nombre ( ej: dll ) y guardalo en una carpeta pj: c:\hola\.

2º) Te aparecen dos archivos, dll.h y dllmain.c. Guardalos en la carpeta del proyecto y vamos a comentar su contenido:

dll.h :
Código:
#ifndef _DLL_H_                // Esta y el siguiente es para definir donde empieza y acaba la cabezera.
#define _DLL_H_

#if BUILDING_DLL // Si el archivo se esta compilando salta esta, que exporta la dll
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */  // Si no esta compilando ( osea se esta llamando) salta esta, que importa la dll
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */ // cerramos el if


DLLIMPORT void HelloWord(void); // esta es la funcion que definiremos despues. podemos definir tantas funciones como keramos y es igual que una funcion normal solo que llega DLLIMPORT escrito antes del tipo de funcion que es.
/* Un ejemplo de mas
 DLLIMPORT int suma(int x, int y); // esta es conocida o no.
*/

#endif /* _DLL_H_ */ // aki se acaba la cabezera.

dllmain.c :

Código:
/* Replace "dll.h" with the name of your header */
#include "dll.h"                            //Cabezera creada antes.
#include <windows.h>                 //Cabezeras.
#include <stdio.h>
#include <stdlib.h>

DLLIMPORT void HelloWorld ()     // aki definimos nuestras funciones.
{
    MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}
/* Del ejemplo anterior de la suma kedaria.
DLLIMPORT int suma(int x, int y)
{
 int q;
 q = x+y;
 return q;
}
*/

// Esto es la funcion principal de las dll, lo que hace es que se prepara para cuando un proceso o suceso la llama, no se modifica, es siempre la misma aunke pongas muchas funciones.
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

Bien visto eso, creo que ya esta, ahora le damos a compilar.

3º) Miramos en la carpeta donde teniamos el proyecto y nos salen unos cuantos archivos.
El dll.h y dllmain.c ( ya los explike), el del proyecto.dev, el resultado de la compilacion dll.dll ( simpre tiene que ir con el archivo .exe que crearemos despues, otro llamado libdll.def ( no nos interesa) y libdll.a ( el importante, al que linkearemos nuestro exe ).

4º) Cerramos el proyecto de la dll y abrimos uno nuevo de windows o ms-dos, en c o en c++ a tu eleccion. Le ponemos un nombre al proyecto ( ej: hola ),( yo hare para el manual un de ms-dos en c). Nos aparece un archivo llamdo main.c ( ya conocido por todos ) donde tiene lo basico y nosotros le añadimos unas cosas para que kede asi:

Código:
#include <stdio.h> // cabezeras estandar
#include <stdlib.h>
#include "dll.h"      // la cabezera utilizada anteriormente.

int main(int argc, char *argv[]) // funcion principal del exe
{
  HelloWord(); // llamamos a la funcion que creamos y metimos en la dll.
  system("PAUSE");
  return 0;
}

5º) Ahora entes de compilar tenemos que linkear a la libreria libdll.a . Vamos a Proyecto/Opciones de proyecto a la pestaña Parametros, y debajo del cuadro blanco que pone Linker de damos a ese boton que pone añadir biblioteca o objeto. Buscamos la carpeta donde estamos trabajando y hacemos doble click en libdll.a ( que sera la unica que aparezca ).
Aceptamos y compilamos nuestro exe llamado hola.exe. Y como ves se ejecuta la funcion que esta en la dll.

Bueno, para crear una dll para una funcion como que no es muy recomendable pero si tienes una decenas empieza a ser util, sobre todo para juegos y cosas asi de gran tamaño.

Para cualkier duda o error que tuviese posten gracias.

Un saludo p.


En línea

sch3m4
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.608

Nihil est in intelectu quod prius not fuerit insen


Ver Perfil WWW
Re: Manual de como crear archivos dll y como utilizarlo desde un exe en dev c++
« Respuesta #1 en: 15 Octubre 2005, 19:55 pm »

muy bueno  ;) aquí pongo un link para hacerlo en VC++

http://alonso_m.tripod.com/visualc/creardll.htm


En línea

SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
Pseudoroot


Desconectado Desconectado

Mensajes: 839



Ver Perfil
Re: Manual de como crear archivos dll y como utilizarlo desde un exe en dev c++
« Respuesta #2 en: 20 Octubre 2005, 20:50 pm »

gracias P me facilitaste el trabajo.
En línea

zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Manual de como crear archivos dll y como utilizarlo desde un exe en dev c++
« Respuesta #3 en: 27 Diciembre 2012, 20:38 pm »

Bueno, para crear una dll para una funcion como que no es muy recomendable pero si tienes una decenas empieza a ser util, sobre todo para juegos y cosas asi de gran tamaño.

No entiendo muy bien... es decir, cuando he creado muchas funciones es conveniente crear librerías con ellas, ¿cierto?
¿y seguir estos pasos para las DLLs me permite reducir el tamaño del .exe?

Yo de momento sólo sé realizar programas básicos en C++, sin interfaz gráfica. Sin embargo, una vez que tomé el .exe de uno de mis programas y lo llevé a otra computadora, simplemente no funcionaba, me decía que faltaban algunas DLL. El pequeño programa en consola (win32) lo hice en Visual Studio, ¿será que VS agrega cosas innecesarias y que por eso se requieren DLLs?
Era un programa sencillísimo, de los primeros que hice, y aún así no se podía ejecutar en dicha máquina xd
No ocurre cuando se los envío a compañeros que sí tienen instalado el VS.
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como instalar Aircrack y como utilizarlo
Hacking Wireless
Lebrel 1 3,173 Último mensaje 29 Agosto 2012, 21:02 pm
por MauroMasciar
cómo ver la ip desde wiresark
Redes
nneferet 2 2,203 Último mensaje 10 Octubre 2012, 15:54 pm
por nneferet
Como Crear un Grafo en SvG?
Programación C/C++
gasparenaide 0 2,328 Último mensaje 9 Abril 2013, 06:10 am
por gasparenaide
Ayuda: IP aliasing como crear múltiples IP desde un PC
Redes
Eidens 3 2,491 Último mensaje 29 Abril 2017, 22:41 pm
por Ancasu
Cómo descargar archivos desde JDownloader y cómo gestionar todas tus descargas
Noticias
wolfbcn 0 1,819 Último mensaje 27 Mayo 2019, 02:15 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines