2009-04-22 21 views
2

Ich entwickle eine Multi-Plattform-Anwendung und in einer Komponente habe ich eine Klassenmethode namens DrawText. Leider bekomme ich einen Linker-Fehler (nur bei Windows), der besagt, dass es ein nicht aufgelöstes externes Symbol für eine DrawTextW-Methode dieser Klasse gibt.Konflikt mit DrawText-Funktion

Ich habe das vorher mit anderen Methoden gesehen, die auf "Text" enden, wo es nach einer FooTextW oder FooTextA Methode statt der FooText Methode sucht, die ich definierte. Meine Annahme ist, dass irgendwo in den Windows-Headern eine Makro-Definition existiert, die FooText basierend auf einer anderen Definition FooTextW oder FooTextA zuweist.

Abgesehen von der Umbenennung meiner Funktion (was ich in der Vergangenheit getan habe), hat jemand gute Ideen, um dieses Problem zu umgehen?

Danke.

Joe

+0

Bitte stimmen Sie dies ab: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6656174-have-a-version-of-windows-h-that-doesn-t-define- ma –

Antwort

0

Ja, das ist ein echtes Problem mit Windows verwenden, und es gibt keinen Weg, um sie auszuschalten, da die alle Header wie folgt aussehen:

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

So oder so definiert Sie gehen auf das Symbol erhalten . Es wäre sehr schön, wenn Sie # etwas definieren könnten, bevor Sie windows.h einbeziehen, was dieses Verhalten abstellt, aber keines existiert.

5

Sie wirklich nur zwei Möglichkeiten:

#ifdef DrawText 
#undef DrawText 
#endif 

Oder Ihre Funktion umbenennen. Win32 verwendet Makros, die keinen Namespace oder Scoping haben, also sind Sie irgendwie festgefahren.

Wir benennen nur unsere Funktionen um.

BTW: Es basiert normalerweise auf #ifdef UNICODE (oder _UNICODE oder ein paar andere Varianten).