C++ crear dll y ejecutarla desde un exe
Dejamos de programar los dll desde los tiempos del Borland C pues la verdad que funcionaban muy mal, 'trancándose' el PC con frecuencia. Pero desde hace un par de semanas, que hemos bajado el Visual Studio 2013 y que andamos actualizando programas, encontramos varias rutinas que se pueden evitar volver a programar usando en vez los dll y ahora si, con mejores compiladores, ellos funcionan OK.Los dll son programas que no se ejecutan por si mismos. Requieren ser llamados desde un exe para que funcionen. Sirven para evitar realizar programas 'repetitivos' en los exe, ahorrando trabajo y también para actualizar programas con nuevas o corregidas rutinas y para incrementar los exe 'modularmente'.
El compilador Visual Studio 2013 no es frecuente entre los usuarios pues vale 17.000 euros, aunque se le descarga con tres meses de prueba ampliable, plus 8 horas de descarga, ya que son 10 Gb mas otras 8 horas si se desea tener la ayuda en el disco duro.
Mostraremos como hacer un dll y ejecutarlo desde un exe, con el compilador Dev-Cpp que puede ser descargado gratis. Mostramos imagen.
Hagamos primero el dll con la opción File del menú y luego 'NewProject' y en la ventana que aparece, configuramos :
a) pulsar icono DLL b) Name 'Dalmau' y c) C project
Pulsando Ok nos sale una nueva ventana que nos pide donde guardar el 'Project' Dalmau.dev,
Una vez guardado el Project Dalmau.dev, aparece el editor del compilador con los archivos necesarios en el editor de texto, dll.h y dllmain.c que los proporciona el editor del compilador y OJO también aparecerá una librería,libDalmau.a en la carpeta donde hemos guardado el Project que la usaremos al crear el exe.
Sobre ellos podremos hacer variantes según nuestras necesidades.
Los dejamos tal cual y vemos que este dll al ser ejecutado, su única función void HelloWorld (void) pondrá en pantalla el saludo 'Hello World from DLL'
Procedemos ahora a compilarlo (crear dalmau.dll) en el menú : Execute/Compiler y en la carpeta que hemos guardado resultados, vemos nuestro nuevo dll archivo dalmau.dll
Ahora nos toca hacer el exe que llamará a la función HelloWorld(void) y para ello en File opción New y en la pantalla que aparece...
Configurar : a) Console Application b) Name Dalmau2 y c) C project
...y guardamos nuevamente en la misma carpeta en que tenemos el dll para que el exe lo encuentre pues de otra manera, el dll deberá ser guardado en System32
Tendremos el editor con el proyecto Dalmau2 y único archivo main.c
A este archivo debemos adicionar dll.h y adicionar comandoHelloWorl()
OJO mucho OJO, antes de compilar (saldrá ERROR) debemos adicionar la librería creada por el dll y lo hacemos con opción Project/Project options y en la ventana que aparece, seleccionamos opción 'Parametres' y pulsando 'Add library' buscar en la carpeta que tenemos guardados nuestros archivos del dll y hacer doble clic en la única librería existente, libDalmau.a
Ahora si compilar : Execute/Compile
Ejecutar el programa exe con : Execute/Run
En el resultado de 'run' aparece la pantalla Consola, también llamada del DOS o Terminal, debido a que el programa Dalmau.exe lo hemos compilado bajo DOS y la respuesta del dll es en pantalla gráfica pues el Dalmau.dll lo hemos compilado como programa gráfico (Windows).
Podemos poner varias funciones tipo HelloWorl() en el dll según nuestras necesidades, por ejemplo, suma(x,y) y definirlas en el archivo de cabecera 'h' en nuestro caso dll.h y luego llamarlas desde el exe, al igual que hemos hecho con HelloWorl()
De esta forma, cada vez que hagamos un nuevo programa, en que por ejemplo tengamos el 'About', en vez de programarlo en el exe, lo programamos en el dll de tal manera que si cambian las condiciones del about, lo arreglamos en el dll y todos nuestros programas tomarán el nuevo valor dado y para ello guardar el dll en Sistem32 y/o copiar el nuevo dll en cada una de las carpetas que deseamos lo ejecute cada uno de los exe que tengamos
Si el programa exe lo tiene un cliente, el nuevo cambio será entregando el nuevo dll que irá a la carpeta del programa.
Suerte !!!
0 comentarios: