2009-04-22 5 views
2

Je développe une application multiplateforme et dans un composant j'ai une méthode de classe appelée DrawText. Malheureusement, j'obtiens une erreur de l'éditeur de liens (sur Windows uniquement) indiquant qu'il existe un symbole externe non résolu pour une méthode DrawTextW de cette classe.Conflit avec la fonction DrawText

Je l'ai déjà vu avec d'autres méthodes se terminant par "Text" où il cherche une méthode FooTextW ou FooTextA à la place de la méthode FooText que j'ai définie. Ma supposition est que quelque part dans les en-têtes de Windows il y a une définition de macro assignant FooText à FooTextW ou FooTextA basé sur une autre définition.

En plus de renommer ma fonction (ce que j'ai fait par le passé), est-ce que quelqu'un a de bonnes idées pour contourner ce problème?

Merci.

Joe

+0

S'il vous plaît voter pour cette: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6656174-have-a-version-of-windows-h-that-doesn-t-define- ma –

Répondre

0

Oui, cela est un vrai problème avec l'utilisation de Windows, et il n'y a aucun moyen de le désactiver car les en-têtes tous ressemblent à ceci:

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

Alors vous allez obtenir le symbole défini ou l'autre manière . Ce serait très bien si vous pouviez # définir quelque chose avant #include windows.h qui éteint ce comportement, mais hélas il n'en existe aucun.

5

Vous avez vraiment avez deux choix:

#ifdef DrawText 
#undef DrawText 
#endif 

ou renommer votre fonction. Win32 utilise des macros qui n'ont pas de nom ou de portée, vous êtes donc bloqué.

Nous venons de renommer nos fonctions. BTW: Il est basé sur #ifdef UNICODE habituellement (ou _UNICODE ou quelques autres variantes).