http://stackoverflow.com/q/2804893
http://stackoverflow.com/q/1467144
Mi caso era que estaba compilando una dll en c++ con Visual Studio Express 2013 y encontré que, al intentar invocarla desde otra aplicación, el compilador decoraba los nombres de las funciones.
Para evitarlo, se deben declarar las funciones con extern "C":
En el archivo .h:
extern "C" __declspec (dllexport) long SomeFunction(int param);
Y en el archivo .cpp respectivo:
extern "C"
__declspec (dllexport) long SomeFunction(int param)
{
return _somethingIwantToDo(param);
}
si se está depurando, es mejor dejar la opción de "Generar Información de Depuración" en "Si" o el depurador empezará a protestar:
Esto es mejor dejarlo en "Si".
Al colocar extern "C" el compilador ya no decora los nombres de las funciones aunque la convención de llamada sea stdcall o cdecl:
Eso sí, la convención de llamada de la dll y la aplicación que la invoca debe ser la misma, o el compilador arrojará el error LNK2019 y de paso el LNK1120:
No hay comentarios:
Publicar un comentario