Código:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.
This is usually a result of calling a function declared with one calling convention with a function
pointer declared with a different calling convention.
El codigo del programa llamador es el siguiente:
main.cpp
Código
#include <Windows.h> #include <iostream> typedef void (__stdcall *PROC_info)(char *,char *,long *,long *); struct PLUGIN { HMODULE dll_entrypoint; PROC_info info_func; }; int main() { PLUGIN plugin1; plugin1.dll_entrypoint = LoadLibraryA("C:\\Dll-Test1.dll"); if(plugin1.dll_entrypoint == NULL) { FreeLibrary(plugin1.dll_entrypoint); MessageBoxA(0,"No se encuentra la DLL","Error",0); return 1; } else{ char *Version = ""; char *Autor = ""; long *numAutor = 0; long *numVersion = 0; plugin1.info_func = (PROC_info)GetProcAddress(plugin1.dll_entrypoint,"func1"); plugin1.info_func(Version,Autor,numVersion,numAutor); FreeLibrary(plugin1.dll_entrypoint); } system("pause"); return 0; }
Y el codigo de la DLL
plugin_main.h
Código
#define DLLDEXPORT __declspec(dllexport) // export DLL information extern "C" { DLLDEXPORT void func1(char *, char *,long *,long *); };
plugin_main.cpp
Código
#include "plugin_main.h" #include <windows.h> BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: //PROCESO CARGA break; case DLL_THREAD_ATTACH: //THREAD CARGA break; case DLL_THREAD_DETACH: //THREAD DESCARGA break; case DLL_PROCESS_DETACH: //PROCESO DESCARGA break; } return TRUE; } DLLDEXPORT void func1(char *Version, char *Autor,long *numVersion,long *numAutor) { MessageBoxA(0,"Soy el texto","Soy el caption",1); }
Si alguien me ayuda seria genial ya que despues de frustrarme para que ejecute la funcion ahora me saltan errores.
Pff siento las molestias resulto ser una tonteria...
Lo arregle cambiando en la declaracion de PROC_Info el __stdcall por un __cdecl
Saludos, Noele1995