2010-08-09 31 views
0

在VS2005中,我使用了_cdecl調用約定,並且該項目的構建沒有任何鏈接器錯誤。我改變調用約定,而移植項目VS2008到_stdcall後,我得到以下錯誤:將調用約定從cdecl更改爲stdcall

錯誤LNK2001:解析外部符號__imp__GCBOpen @ 8。

配置設置> C^\ C++> GENRAL>公共語言運行庫支持設置爲無公共語言運行庫支持

我想清楚需要,爲了解決這個問題做任何項目的設置或更改代碼的幫助。 任何幫助表示讚賞。

回答

2

它看起來像GCBOpen()編譯爲__cdecl但它的聲明沒有明確說明。 (這就是爲什麼當你的默認值爲__cdecl時,它連接正常,但當你改變它時會中斷)。通常,外部庫中的函數聲明是指定調用約定以避免出現問題的好習慣。

某處你必須有這樣的:您的答覆

#define CALLCONV __cdecl 
__declspec(dllimport) 
extern int CALLCONV GCBOpen(int, int); 
+0

三江源:

__declspec(dllimport) extern int GCBOpen(int, int); 

這將是更好的。它actaullay解決了這個問題。 我還有一個問題。 由於GCBOpen是一個導入函數,函數聲明應該有「extern」關鍵字。 爲什麼代碼在調用約定爲__cdecl時沒有指定「extern」? – Lakshmi 2010-08-09 20:32:12

+0

'extern'被假定爲不是'static'的函數聲明,所以你不需要明確地指定它。我不知道爲什麼我堅持寫我自己的聲明...... – 2010-08-09 21:05:43

相關問題