[Solucionado]Ayuda pruebas con DLLs

Iniciado por noele1995, 15 Julio 2012, 22:34 PM

0 Miembros y 1 Visitante están viendo este tema.

noele1995

Bueno estaba haciendo ciertas pruebas creando dlls y llamandolas implicitamente y explicitamente para aprender un poco y ahora que le he puesto algunos argumentos me ejecuta la funcion de dll pero despues de ejecutarla me salta este error:

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 (cpp) [Seleccionar]
#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 (cpp) [Seleccionar]
#define DLLDEXPORT  __declspec(dllexport)   // export DLL information

extern "C" {
      DLLDEXPORT void func1(char *, char *,long *,long *);
};




plugin_main.cpp
Código (cpp) [Seleccionar]
#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