llevo toda la tarde con un problema que no consigo resolver y ojala alguien pueda arrojarme un poco de luz. se que podria resumir este codigo en pocas lineas usando directamente LoadLibrary pero la idea es jugar un poco para intentar entender todo lo que pasa.
la idea es que ejecuto un exe y este busca la direccion de LoadLibraryA en la dll Kernel32, para luego crear un hilo pasandole como funcion principal el puntero a LoadLibraryA y como parametro una dll creada por mi. en esta dll hay una callback function donde solo tira un messagebox, y luego otra funcion que es la que intento ejecutar despues, y es aqui donde esta el problema. el messagebox me lo tira bien, pero luego cuando intento obtener la direccion de MyFunction me tira el error de "Could not retrieve the address function".
en fin, este es el codigo de mi dll:
Código
#include <stdio.h> #include <windows.h> BOOL APIENTRY DllMain (HINSTANCE hInstDLL, DWORD reason, LPVOID reserved) { BOOL dllSuccess = FALSE; if (reason == DLL_PROCESS_ATTACH) { dllSuccess = MessageBox (NULL, "Funciona! :)", NULL, MB_OK); } return dllSuccess; } __declspec(dllexport) void __stdcall MyFunction (void) { }
y el siguiente codigo es el del ejecutable:
Código
#include <stdio.h> #include <windows.h> int main (int argc, char **argv) { HMODULE hKernel32 = GetModuleHandle ("Kernel32"); FARPROC lpLoadLib = GetProcAddress (hKernel32, "LoadLibraryA"); HANDLE hThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) lpLoadLib, (void*) argv[1], 0, NULL); WaitForSingleObject (hThread, INFINITE); DWORD hLibModule=0; GetExitCodeThread (hThread, &hLibModule); if (!hLibModule) { return 1; } FARPROC myFunc = GetProcAddress ((void*) hLibModule, "MyFunction"); if (!myFunc) { return 1; } myFunc(); CloseHandle (hThread); return 0; }
y eso es todo... alguien puede ayudarme?
muchas gracias!
edito: perdonad cometi un error, mi problema no es con esa funcion sino con la de GetProcAddress del final. llevo demasiado rato metido en esto y pasa lo que pasa... xD