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.

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top