2009-04-22 83 views
2

我正在開發一個多平臺應用程序,並且在一個組件中我有一個名爲DrawText的類方法。不幸的是,我得到一個鏈接器錯誤(僅在Windows上),說這個類的DrawTextW方法有一個未解析的外部符號。與DrawText函數衝突

我以前見過這個以其他方法結尾的「文本」,它正在尋找FooTextW或FooTextA方法而不是我定義的FooText方法。我的假設是,在Windows頭文件的某處,有一個宏定義將FooText分配給基於其他定義的FooTextW或FooTextA。

除了重命名我的函數(這是我過去做的),有沒有人有任何好的想法來解決這個問題?

謝謝。

+0

請投票:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6656174-have-a-version-of-windows-h-that-doesn-t-define-嘛 – 2014-11-04 14:10:45

回答

0

是的,這是使用Windows的一個現實問題,而且也沒有辦法把它關掉,因爲頭都這個樣子:

#ifdef UNICODE 
#define GetDlgItemText GetDlgItemTextW 
#else 
#define GetDlgItemText GetDlgItemTextA 
#endif 

所以你會得到符號定義的兩種方式。如果你可以在包含windows.h的文件中定義一些關閉這個行爲的東西,那將是非常好的,但是不存在。

5

你真的只有兩種選擇:

#ifdef DrawText 
#undef DrawText 
#endif 

或重命名你的函數。 Win32使用沒有命名空間或作用域的宏,所以你有點卡住了。

我們只是重新命名我們的功能。

順便說一句:它基於#ifdef UNICODE通常(或_UNICODE或一些其他變體)。