2013-02-18 83 views
2

我有2個項目在c + +(MFC) 一個是我在第二個(一個可執行的)使用的庫項目。兩個項目之間的MFC CString鏈接器錯誤

他們一起工作很好,直到我從以CString作爲參數的常規項目中調用一個函數。我得到這樣

error LNK2019: unresolved external symbol "public: void __thiscall 
CTextDisplay::SetText1(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t, 
class ATL::ChTraitsCRT<wchar_t> > >)" ([email protected]@@[email protected]_WV? 
[email protected][email protected][email protected]@@@@@[email protected]@@Z) referenced in function 
"public: void __thiscall CManualPane::SetBeadCountFor(int,double)" 
([email protected]@@[email protected]) C:\source\IQ-Project\IQ\ManualPane.obj IQ 

可執行項目鏈接錯誤有其字符集UNICODE但圖書館有它設置爲MULTY字節chatacter集。我真的不能改變他們沒有得到可笑的錯誤數量。

有什麼建議嗎?

編輯:我們在這兩個項目中有不同設置的原因是因爲可執行項目基本上是一個我的團隊沒有構建或創建的外部項目。我們只需把它帶入並使用它。圖書館項目是我們幾年來一直在努力的事情。

+0

在調用接受一個int庫中的函數去(例如)沒有問題 – irco 2013-02-18 17:21:55

+1

我不確定哪一個你稱爲*正規項目*,但假設你在庫項目中調用一個函數返回一個'CString',嘗試將返回值存儲爲一個'CStringA '在exe項目中。但即使編譯成功,如果兩者的UNICODE設置不同,我也會對從庫中傳入MFC類型保持警惕。 – Praetorian 2013-02-18 17:26:56

+0

'CString'類型的參數在設計庫的接口時是非常邪惡的事情。 – LihO 2013-02-18 17:29:05

回答

1

最終事實證明這是一個更好的主意,以避免在同一個解決方案Unicode和multybyte項目,所以我把它全部轉移到Unicode和從那裏

3

當您在可執行文件中包含庫項目的頭文件時,可能會在函數聲明中使用typedef。由於可執行文件使用UNICODE,所以聲明現在在UNICODE中。但是,庫實現仍然在MultiByte中,因此定義與導致鏈接器錯誤的聲明不匹配。

研究如何設置這些typedefs,並且可能可以在包含的標題周圍執行一些特殊的#define,#undef。

+0

我明白你在說什麼,但我不知道我需要從哪裏開始尋找。 stdafx沒有引用CString,也不知道其中的任何其他typedefs可能是 – irco 2013-02-18 17:53:29

+0

底部的表可能有助於http://msdn.microsoft.com/en-us/library/5bzxfsea(v=vs.80 )的.aspx – thisisdog 2013-02-18 17:59:58