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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Crear dll dinamicos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear dll dinamicos  (Leído 3,159 veces)
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Crear dll dinamicos
« en: 29 Diciembre 2014, 01:54 am »

Estoy intentando hacer un dll para después poder utilizar su función.

Desde visual studio 2013 creo nuevo proyecto de consola win32 vació. Luego le agrego un archivo hpp y cpp. Compilo. Me sale el dll.

Creo otro proyecto y lo intento cargar con:
Código
  1. #include <Windows.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. typedef void(* F)();
  7.  
  8. #pragma comment(lib,"dll_test1.lib")
  9.  
  10.  
  11. int main(){
  12. HMODULE library = LoadLibraryA("dll_test1.dll");
  13. if (library){
  14. cout << "ok";
  15. }
  16. F ptr = (F)GetProcAddress(library, "sumar");
  17.  
  18.  
  19. (*ptr)();
  20.  
  21. getchar();
  22.  
  23. return 0;
  24. }

Me carga bien la library pero luego me sale error al intentar utilizar la función.
Con Alternate DLL Analyzer vi que en la dll no hay funciones.
Que hago mal?

Saludos

@Edit: Los codigo del dll

dll_test.hpp
Código
  1. __declspec (dllexport) void sumar();
dll_test.cpp
Código
  1. #include <iostream>
  2. __declspec(dllexport) void sumar(){
  3. std::cout << "Functiona!";
  4. }


« Última modificación: 29 Diciembre 2014, 17:15 pm por patilanz » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Crear dll dinamicos
« Respuesta #1 en: 29 Diciembre 2014, 04:57 am »

Si la DLL tiene la función exportada, entonces el error parece estar cuando haces GetProcAddress. El nombre de la función es sumar, no function.

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: Crear dll dinamicos
« Respuesta #2 en: 29 Diciembre 2014, 13:46 pm »

Ya me di cuanta del error pero sigue igual .No es por el nombre. Ya lo cambie arriba.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Crear dll dinamicos
« Respuesta #3 en: 29 Diciembre 2014, 15:13 pm »

Tal vez poniéndole extern "C"{ /* función en el .h */?

Es la única diferencia que logro ver entre tu DLL y las mías xD
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Crear dll dinamicos
« Respuesta #4 en: 29 Diciembre 2014, 16:36 pm »

El error lo tenés en la declaración de función de tu dll...

Código
  1. __declspec(dllexport) void sumar()

...cuando debería ser:

Código
  1. __declspec(dllexport)int sumar(int a,int b)

Que raro que hasta ahora nadie se haya dado cuenta. :laugh:


B#
En línea



patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: Crear dll dinamicos
« Respuesta #5 en: 29 Diciembre 2014, 17:14 pm »

La verdad es que he publicado diferentes códigos  :rolleyes: Publique la versión antigua que probé (int sumar(int,int)) y luego lo cambie por void para probar algo mas simple pero seguía igual:

Ahora es así:

Código
  1. #include <Windows.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. typedef void(* F)();
  7.  
  8. #pragma comment(lib,"dll_test1.lib")
  9.  
  10.  
  11. int main(){
  12. HMODULE library = LoadLibraryA("dll_test1.dll");
  13. if (library){
  14. cout << "ok";
  15. }
  16. F ptr = (F)GetProcAddress(library, "sumar");
  17.  
  18.  
  19. (*ptr)();
  20.  
  21. getchar();
  22.  
  23. return 0;
  24. }

Código
  1. __declspec (dllexport) void sumar();

Código
  1. #include <iostream>
  2. __declspec(dllexport) void sumar(){
  3. std::cout << "Functiona!";
  4. }

Perdón por el lió pero sigue sin funcionar.

ivancea96 donde se agrega lo de extern?

Lo edite también arriba
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Crear dll dinamicos
« Respuesta #6 en: 29 Diciembre 2014, 19:07 pm »

Código
  1. extern "C"{
  2.    __declspec (dllexport) void sumar();
  3. }

Prueba eso.
En línea

patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: Crear dll dinamicos
« Respuesta #7 en: 29 Diciembre 2014, 19:36 pm »

Funciona  ;-)!
Ahora estoy leyendo que es exactamente lo que hace pero tengo otra duda.
Si creo dos funciones que tienen diferentes argumentos como los llamo porque GetProcAddress solo me deja poner el nombre ? Y para clases ?
He visto que si quito el lib que me genera también funciona. Que contiene y es necesario?

Gracias

@Edit: extern "C" es solo para visual studio?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Crear dll dinamicos
« Respuesta #8 en: 29 Diciembre 2014, 20:34 pm »

Tengo entendido que extern "C" indica que la función es compilada al estilo de C, y no C++.

Que yo sepa, no se pueden exportar clases a DLL. Pero bueno, http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL no parece coincidir. No sé si esa solución sirve en todos los compiladores, pero bueno.

Para lo de sobrecargar funciones, ya no sé. Según he mirado, puede tener que ver el archivo '.def', pero yo no lo sé utilizar. (.def with LoadLibrary())
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Crear botones dinamicos en VB
Programación Visual Basic
akss_wm 6 9,811 Último mensaje 27 Octubre 2005, 18:12 pm
por Kizar
Formularios dinámicos con XML
Programación Visual Basic
J. Carlos 0 1,426 Último mensaje 31 Enero 2008, 14:26 pm
por J. Carlos
Dock PHP , Nueva App para crear sitios web dinamicos, reemplazara artisteer?
Desarrollo Web
Graphixx 1 3,336 Último mensaje 17 Julio 2013, 20:56 pm
por #!drvy
Crear arrays dinamicos en struct
Programación C/C++
manri98 4 3,464 Último mensaje 12 Noviembre 2016, 10:32 am
por MAFUS
Ayuda para crear inputs dinámicos!
Scripting
Ruusa 0 2,726 Último mensaje 30 Julio 2022, 22:13 pm
por Ruusa
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines