C/Visual C - Mensaje de error en DLL

 
Vista:

Mensaje de error en DLL

Publicado por rraces (25 intervenciones) el 28/03/2006 11:55:22
Hola amigos tengo creada una dll, la cual devuelve la suma de dos numeros, cuando creo un ejecutable para utilizar la dll me aparece un mensaje como el siguiente:

titulo: Microsoft Visual C++ Debug Library
Cuerpo:
Debug Error!

program: ...\ruta\ejectuable.exe
Module:
File:i386\chkesp.c
Line:42

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 convection with a function pointer declared
with a different convention

(Press Retry to debug the application)

Y aparacen tres botones(ANULAR,REINTENTAR,OMITIR)

Si le doy a anular se para la aplicación, si le de doy a reintentar se me a depurar y
si le doy a omitir sigue con la aplicación correctamente.

¿Cómo puede corregir esto?

Otra pregunta es que despues voy a utilizar esta dll con una aplicación en Visual Basic, pero ademas de devolver un valor tengo que devolver dos cadenas por referencia. Esto como se haría?

Gracias y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Mensaje de error en DLL

Publicado por fernando.gomez (1604 intervenciones) el 28/03/2006 18:35:22
En la función que exportas de la DLL, ¿estás empleando __declspec(dllexport)? ¿Cómo estás exportando la función, puedo ver el código?

En la función que mandas llamar a la función exportada, ¿la estás ejecutando con __stdcall, o con __fastcall?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mensaje de error en DLL

Publicado por rraces (25 intervenciones) el 31/03/2006 08:58:02
mi código es el siguiente:

#include "stdio.h"
#include "stdlib.h"
#include "windows.h"
#include "string"


void main(void)
{

typedef int (CALLBACK* LPFNDLLFUNC1)(char*,int, int);


HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;



hDLL = LoadLibrary("C:\ \ Sources\\Pruebas\\TeamScriptDll_Pruebas\\Debug\\TeamScriptDll");
if (hDLL != NULL)
{



printf("1\n");
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"TestFunction");
if (!lpfnDllFunc1)
{

// handle the error
FreeLibrary(hDLL);

}
else
{

// call the function

uReturnVal = lpfnDllFunc1("la suma de",5,7);
}
}

system("pause");

}

y en la dll la función la tengo declarada de este modo:

#include "stdafx.h"
#include <vector>
#include <string>

using namespace std;

int __declspec(dllexport) TestFunction( std::vector<std::string>& args )
{
if ( args.size() > 0 )
args[0] = "The Sum Is: ";

if ( args.size() > 2 )
{
int one = atoi( args[1].c_str() );
int two = atoi( args[2].c_str() );

return one + two;
}

return 0;
}

He probado ha pasar un char * y un string pero no me va pasandole un string.

Gracias y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar