2011/10/12

[vc++]LNK2019

環境:windows xp sp3+visual studio 2005
問題:error lnk2019 unresolved external symbol
error LNK2019: unresolved external symbol "extern "C" int __stdcall MyClass::Open(const char *, unsigned int, double )" (?FingerReader@@$$........@Z) referenced in function "private: boo __clrcall ApplicationDlg::OnInitMember(void)" (?Open@MyClass@Open@@$$..$......)
(詳細的錯誤訊息我沒複製下來,只知道大概是這樣。)


好了,問題來了~
它是說我的程式用了一個不認得的外部符號,偏偏我就已經告訴它要用哪個Library了,怎麼還會不認得呢?
井民全是這樣說的....
亞伯特是這樣說的....
還有CSDN上的一堆阿六仔也提供了一些說法與解法,卻沒一個能適用我遇到的狀況......囧rz

當時我只知道狀況是:
我有個Library A ,裡面的class有overload Open 這個 function,然後在dialog做initial時,不認得Open這個符號!

所以我就開個新專案,隨便寫個class,裡面有SetNumber(int total) 這個member function,Link and build過了~
再新增個SetNumber(int x, int y),Link and build又過了!(蝦餃....)

那我去GetNumber()之後,會把Return值用MessageBox秀出,發現是一堆亂碼<--原因是該專案設為使用Unicode字元集!!!

然後進 專案->屬性->組態屬性->一般->專案預設值->字元集->改為"使用多位元組字元集"

顯示的return value就正常囉~

然後我就把原來的專案設定的字元集改成一樣的設定,LNK2019就消失了XDDD

路過的大俠,懂這啥原因的,能給我解釋解釋嗎,多謝!!!