C/Visual C - Como crear una dll?

 
Vista:

Como crear una dll?

Publicado por Fabian (1 intervención) el 21/04/2001 14:57:46
Hola a todos!

Necesito saber como crear una simple dll en VC++ 6.0 que sume 2 numeros y que sea llamada desde VB.

He visto en muchos sitios tutoriales acerca de este tema... y he implementado todos los ejemplos que alli muestran, pero siempre que hago la llamada desde VB me sale el siguiente error:
"Error 49 en tiempo de ejecucion: La convencion de llamadas a DLL es incorrecta"

Alguno de vosotros sabe por que és?

Anexo el codigo:

demo1.cpp
=========

#include <windows.h>
#include "demo1.h"

BOOL WINAPI DllMain( HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}


extern "C" __declspec ( dllexport ) int Sumar()
{
return 5+3;
}

demo1.h
=======
extern "C" __declspec ( dllexport) int Sumar();

gracias por la ayuda que me puedan brindar.

Un Saludo.
Fabian
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
Imágen de perfil de Alejandro

Solución al error de convención de llamadas en una DLL llamada desde VB

Publicado por Alejandro (913 intervenciones) el 23/09/2024 20:29:08
Hola Fabián.

El error que estás recibiendo, "Error 49 en tiempo de ejecución: La convención de llamadas a DLL es incorrecta", generalmente se produce cuando hay una discrepancia en la convención de llamadas entre la DLL y el código que la llama.

En tu caso, parece que estás utilizando la convención de llamadas incorrecta en tu DLL. Por defecto, VC++ 6.0 utiliza la convención de llamadas "C" (__cdecl), mientras que VB utiliza la convención de llamadas "StdCall" (__stdcall) de forma predeterminada.

Para solucionar este problema, puedes intentar cambiar la convención de llamadas en tu DLL para que coincida con la convención utilizada por VB. Aquí tienes los pasos a seguir:

1. En tu archivo demo1.h, modifica la declaración de la función Sumar() de la siguiente manera:

1
extern "C" __declspec(dllexport) __stdcall int Sumar();

2. En tu archivo demo1.cpp, modifica la definición de la función Sumar() de la siguiente manera:

1
2
3
4
extern "C" __declspec(dllexport) __stdcall int Sumar()
{
    return 5 + 3;
}

3. Vuelve a compilar tu DLL en VC++ 6.0.

Con estos cambios, la convención de llamadas en tu DLL debería coincidir con la convención utilizada por VB, lo que debería solucionar el error que estás experimentando.

Espero que esta solución te sea útil.

Saludos cordiales,

Ale.
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