将调用约定从cdecl更改为stdcall

时间:2010-08-09 19:29:36

标签: calling-convention

在VS2005中,我使用的是_cdecl调用约定,项目构建没有任何链接器错误。在将项目移植到VS2008时将调用约定更改为_stdcall后,出现以下错误:

错误LNK2001:未解析的外部符号__imp__GCBOpen @ 8。

配置设置> C \ C ++> Genral>公共语言运行时支持设置为无公共语言运行时支持

我需要有关解决问题所需的任何项目设置或代码更改的帮助。 任何帮助表示赞赏。

1 个答案:

答案 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);