C/Visual C - error al llamar dll?

 
Vista:

error al llamar dll?

Publicado por Oliver++ (339 intervenciones) el 10/09/2002 01:56:32
cuando llamo una funcion dentro de una dll hecha en c++ la cual no lleva parametros todo funcioa bien, pero llamo a otra que toma parametros entonces me da el siguiente error:

BAD DLL CALLING CONVENTION - RUN TIME ERROR '49'

que se supone que es eso.?
la definicion de la funcion en c es la siguente:

extern "C" _declspec ( dllexport )
int _cdecl suma ( int a )
{

return a + 12;

}
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:error al llamar dll?

Publicado por El Mogur (202 intervenciones) el 10/09/2002 12:55:25
Esa que pones es la declaración de la función en la DLL, pero para llamarla, necesitas la declaración de la función en él... ¿cómo es en ese caso?
Parece que tiene que ver con eso, con algo del orden de los parámetros... Mira la conversación titulada "WINAPI?" un poco más abajo.
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:error al llamar dll?

Publicado por Oliver++ (339 intervenciones) el 10/09/2002 14:09:49
pues le puse el WINAPI y tampoco funciona. No tengo ahora idea de que puede ser.
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:error al llamar dll?

Publicado por Alvaro (122 intervenciones) el 10/09/2002 21:01:50
Si la llamas desde VisualBasic ponle __stdcall (aunque WINAPI es un #define para __stdcall) y no __cdecl.
Ahora bien, debes cuidar el tamaño de los tipos de datos.
un tipo int, en C, tiene 32 bist, debes aberiguar que tipo de datos en VisualBasic utiliza 32 bits, creo que long y no integer, que coupa 16.
Ese tipo de datos debes utilizar en la descripcion de la dll en VisualBasic.
Para probar si el problema no es otro, te aconsejo, pruebes tu dll desde otro programa en C, y utilizando __cdecl.
SUERTE...
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:error al llamar dll?

Publicado por Oliver++ (339 intervenciones) el 11/09/2002 03:55:55
me funciona desde otro lenguaje, en visual basic tambien, pero sin parametros.
la funcion me funciona pero si hago una que tome parametros entonces no me funciona. Cual es es problema?
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:error al llamar dll?

Publicado por Alvaro (122 intervenciones) el 11/09/2002 22:41:36
Intenta de la siguiente forma:

char *(__cdecl *fnc)(char *);
HMODULE hdll;

hdll = LoadLibrary( "..\\path\\de_ele_ele.dll" );
if (strfncs_dll == NULL)
return FALSE;

fnc = (char *(__cdecl *)(char *)) GetProcAddress( hdll, "nombre_funcion" );
if (trim == NULL)
return FALSE;

y fnc esta definida como esto en la dll.

#define DLLExport __declspec( dllexport )
DLLExport char *fnc(char *str);

El unico problema es que el nombre de la funcion que queda en la dll suele ser diferente al que tu pusiste.
Abre la dll con el notepad y busca el nombre de tu funcion.
puede que tenga mas caracteres:
ejemplo:
?fnc@@HYAW
El nombre que encuentres es el que debes utilizar en GetProcAddress
Suerte.
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