SoloCodigo

Programación General => C/C++ => Visual C++ => Mensaje iniciado por: diego.martinez en Viernes 30 de Marzo de 2007, 15:36

Título: Getprocaddress
Publicado por: diego.martinez en Viernes 30 de Marzo de 2007, 15:36
Buenas:

LLevo mis buenas horas dandole vueltas a lo que creo que sera un error de lo mas simple. He mirado en Google y no encuentro lo que puedo estar haciendo mal.
Estoy haciendo una dll.

en el .h pongo :

Código: Text
  1. #ifdef WRAPPER_EXPORTS
  2.   #define WRAPPER_API __declspec(dllexport)
  3. #else
  4.   #define WRAPPER_API __declspec(dllimport)
  5. #endif
  6.  
  7.  
  8. WRAPPER_API void Test(void);
  9.  

en el .CPP pongo:

Código: Text
  1. #define WIN32_LEAN_AND_MEAN  
  2. #include <windows.h>
  3.  
  4. #include "Wrapper.h"
  5.  
  6.  
  7. BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
  8. {
  9.   switch (ul_reason_for_call)
  10.   {
  11.   case DLL_PROCESS_ATTACH:
  12.         MessageBox(NULL,"Process Attachment!",NULL,NULL);
  13.         break;
  14.   case DLL_THREAD_ATTACH:
  15.         break;
  16.   case DLL_THREAD_DETACH:
  17.         break;
  18.   case DLL_PROCESS_DETACH:
  19.         MessageBox(NULL,"Process Dettachment!",NULL,NULL);  
  20.         break;  
  21.   }
  22.     return TRUE;
  23. }
  24.  
  25. WRAPPER_API void Test(void)
  26. {
  27. /*... CODE ... */
  28. }
  29.  
  30.  
  31.  


Hasta aqui todo es lo que me crea practicamente el wizard.
El problema es que cuando la voy a usar en el programa WRAPPER_TEST.cpp

Código: Text
  1. #include <windows.h>
  2.  
  3. void (*Pru)();
  4.  
  5. int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lp,int nShowCmd)
  6. {
  7.   SetErrorMode(0);
  8.        HINSTANCE hLib=LoadLibrary("Wrapper.dll");
  9.  
  10.      if (hLib!=NULL)
  11.        {
  12.        Pru=(void(*)())GetProcAddress(hLib,"Test");
  13.        if (Pru==NULL)        
  14.       MessageBox(NULL,"PRU NULL!",NULL,NULL);        
  15.        }
  16.  
  17.      return 0;
  18. }
  19.  


Resulta que Pru siempre me da NULL, no se que puedo estar haciendo mal en esta DLL.
Muchas gracias por anticipado.
Título: Re: Getprocaddress
Publicado por: Eternal Idol en Viernes 30 de Marzo de 2007, 15:37
Usa el Dependency Walker para ver con que nombre esta siendo exportada tu funcion:

http://www.dependencywalker.com/ (http://www.dependencywalker.com/)
Título: Re: Getprocaddress
Publicado por: diego.martinez en Lunes 2 de Abril de 2007, 13:39
muchas gracias,

al final resultaba que no exportaba la funcion por que no la habia escrito en el .def  :whistling:
Título: Re: Getprocaddress
Publicado por: Eternal Idol en Lunes 2 de Abril de 2007, 14:27
Cita de: "diego.martinez"
muchas gracias,

al final resultaba que no exportaba la funcion por que no la habia escrito en el .def  :whistling:
De nadas, esperaba eso o que la exportara como C++ por ejemplo  ;)