• Viernes 1 de Noviembre de 2024, 06:38

Autor Tema:  Getprocaddress  (Leído 1763 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Getprocaddress
« en: Viernes 30 de Marzo de 2007, 15:36 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Getprocaddress
« Respuesta #1 en: Viernes 30 de Marzo de 2007, 15:37 »
0
Usa el Dependency Walker para ver con que nombre esta siendo exportada tu funcion:

http://www.dependencywalker.com/

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Getprocaddress
« Respuesta #2 en: Lunes 2 de Abril de 2007, 13:39 »
0
muchas gracias,

al final resultaba que no exportaba la funcion por que no la habia escrito en el .def  :whistling:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Getprocaddress
« Respuesta #3 en: Lunes 2 de Abril de 2007, 14:27 »
0
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  ;)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.