場景ide
將DLL模塊代碼整合到已有的調用工程中,連接過程當中出現以下錯誤:函數
錯誤 LNK2019 沒法解析的外部符號 "int __cdecl Add(void const *,int)" 該符號在函數 "public: __int64 __thiscall Test(struct PARAMS_T,struct RESULT_t &)"
中被引用this
緣由接口
Add函數聲明以下:編譯器
int Add(void const* p , int timeout = 0);it
實現接口以下:編譯
int Add(void const* p){}說明函數聲明跟實現接口不一致,致使的問題ast
修改以下: int Add(void const* p, int timeout){}class
重點分析:編譯器默認的是__cdecl,因此纔會有Add前面的限定符。引用
_cdecl是C和C++程序的缺省調用方式。每個調用它的函數都包含清空堆棧的代碼,因此產生的可執行文件大小會比調用_stdcall函數的大。函數採用從右到左的壓棧方式。VC將函數編譯後會在函數名前面加上下劃線前綴。 _stdcall是Pascal程序的缺省調用方式,一般用於Win32 Api中,函數採用從右到左的壓棧方式,本身在退出時清空堆棧。VC將函數編譯後會在函數名前面加上下劃線前綴,在函數名後加上"@"和參數的字節數。 _fastcall方式的函數採用寄存器傳遞參數,VC將函數編譯後會在函數名前面加上"@"前綴,在函數名後加上"@"和參數的字節數。