Cambio de convención de llamada de cdecl a stdcall
-
27-09-2019 - |
Pregunta
En VS2005, yo estaba usando _cdecl convención de llamada y el proyecto construye sin errores de enlace. Luego de cambiar la convención de llamada a _stdcall mientras que portar el proyecto de VS2008, me sale el siguiente error:
LNK2001 error:. Símbolo externo sin resolver __imp__GCBOpen @ 8
Ajustes de configuración> C \ C ++> Genral> compatibilidad con Common Language Runtime se establece en el apoyo n Common Language Runtime
necesito ayuda con respecto a cualquier configuración del proyecto o código de cambios que deben hacerse con el fin de resolver el problema. Cualquier ayuda es apreciada.
Solución
Parece que GCBOpen()
se compila __cdecl
pero su declaración no establece explícitamente que. (Es por eso que vincula OK cuando su defecto era __cdecl
pero se rompe cuando se cambie.) En general es una buena práctica para las declaraciones de funciones de bibliotecas externas para especificar la convención de llamada a los problemas de evitar tales como el que usted ha enountered.
En algún lugar debe tener algo como:
__declspec(dllimport)
extern int GCBOpen(int, int);
que sería mejor como:
#define CALLCONV __cdecl
__declspec(dllimport)
extern int CALLCONV GCBOpen(int, int);