在VS2005中,我使用的是_cdecl调用约定,项目构建没有任何链接器错误。在将项目移植到VS2008时将调用约定更改为_stdcall后,出现以下错误:
错误LNK2001:未解析的外部符号__imp__GCBOpen @ 8。
配置设置> C \ C ++> Genral>公共语言运行时支持设置为无公共语言运行时支持
我需要有关解决问题所需的任何项目设置或代码更改的帮助。 任何帮助表示赞赏。
答案 0 :(得分:2)
看起来GCBOpen()
被编译为__cdecl
,但它的声明没有明确说明。 (这就是为什么它在默认值为__cdecl
时链接OK但在更改时断开的原因。)通常,在外部库中声明函数以指定调用约定以避免问题(例如您拥有的问题)是一种很好的做法。 enountered。
某处你必须有:
__declspec(dllimport)
extern int GCBOpen(int, int);
这样会更好:
#define CALLCONV __cdecl
__declspec(dllimport)
extern int CALLCONV GCBOpen(int, int);