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
#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
#define DLLDEXPORT __declspec(dllexport) // export DLL information
extern "C" {
DLLDEXPORT void func1(char *, char *,long *,long *);
};
plugin_main.cpp
#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