沒法解析的外部符號int __cdecl test(void const *,int)解決過程

場景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將函數編譯後會在函數名前面加上"@"前綴,在函數名後加上"@"和參數的字節數。
相關文章
相關標籤/搜索