Programación General > Visual C++
Getprocaddress
(1/1)
diego.martinez:
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 ---#ifdef WRAPPER_EXPORTS #define WRAPPER_API __declspec(dllexport)#else #define WRAPPER_API __declspec(dllimport)#endif WRAPPER_API void Test(void);
en el .CPP pongo:
--- Código: Text ---#define WIN32_LEAN_AND_MEAN #include <windows.h> #include "Wrapper.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: MessageBox(NULL,"Process Attachment!",NULL,NULL); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: MessageBox(NULL,"Process Dettachment!",NULL,NULL); break; } return TRUE;} WRAPPER_API void Test(void){/*... CODE ... */}
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 ---#include <windows.h> void (*Pru)(); int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lp,int nShowCmd){ SetErrorMode(0); HINSTANCE hLib=LoadLibrary("Wrapper.dll"); if (hLib!=NULL) { Pru=(void(*)())GetProcAddress(hLib,"Test"); if (Pru==NULL) MessageBox(NULL,"PRU NULL!",NULL,NULL); } return 0;}
Resulta que Pru siempre me da NULL, no se que puedo estar haciendo mal en esta DLL.
Muchas gracias por anticipado.
Eternal Idol:
Usa el Dependency Walker para ver con que nombre esta siendo exportada tu funcion:
http://www.dependencywalker.com/
diego.martinez:
muchas gracias,
al final resultaba que no exportaba la funcion por que no la habia escrito en el .def :whistling:
Eternal Idol:
--- Cita de: "diego.martinez" --- muchas gracias,
al final resultaba que no exportaba la funcion por que no la habia escrito en el .def :whistling:
--- Fin de la cita ---
De nadas, esperaba eso o que la exportara como C++ por ejemplo ;)
Navegación
Ir a la versión completa