OVH Cloud OVH Cloud

wxWindow sous Windows...

4 réponses
Avatar
Jeremie Fouche
Bonjour a tous

Je me suis mis à wxWindow sous Dev-C++ pour quitter MFC et VC++ 6.0 qui
refuse de compiler mon projet (pb de templates et de STL).
Et la, je suis confronté à un rigolo probleme : De nombreuses fonctions
membres de classes wxXXX qui ont le meme nom dans l'API Windows se voient
renomés a cause de #define liés à l'unicode.

Exemple :
wxDC.DrawText(...) sera transformé en wxDC.DrawTextA(...) a cause de

#ifdef UNICODE
#define DrawText DrawTextW
#else
#define DrawText DrawTextA
#endif
dans winuser.h

En somme, je ne peut donc pas faire l'inclusion de fichiers specifiques
Windows dans mon projet, sous peine de voir des fonctions renommées ? Cela
m'ennuie car j'ai l'habitude de fonctionné avec OutputDebugString et
DebugView.exe.

Existe t il une solution a mon probleme, ou bien dois-je desormais me mettre
aux fonctionnalités de trace de wxWindows ?

En esperant que ma question n'est pas "trop" HS sur ce forum.
Merci

--
Jérémie

4 réponses

Avatar
Patrick \Zener\ Brunet
Bonjour.

"Jeremie Fouche" a écrit dans le
message de news:cenurr$882$
Bonjour a tous

Je me suis mis à wxWindow sous Dev-C++ pour quitter MFC et VC++ 6.0 qui
refuse de compiler mon projet (pb de templates et de STL).
Et la, je suis confronté à un rigolo probleme : De nombreuses fonctions
membres de classes wxXXX qui ont le meme nom dans l'API Windows se voient
renomés a cause de #define liés à l'unicode.

Exemple :
wxDC.DrawText(...) sera transformé en wxDC.DrawTextA(...) a cause de

#ifdef UNICODE
#define DrawText DrawTextW
#else
#define DrawText DrawTextA
#endif
dans winuser.h

En somme, je ne peut donc pas faire l'inclusion de fichiers specifiques
Windows dans mon projet, sous peine de voir des fonctions renommées ? Cela
m'ennuie car j'ai l'habitude de fonctionné avec OutputDebugString et
DebugView.exe.

Existe t il une solution a mon probleme, ou bien dois-je desormais me


mettre
aux fonctionnalités de trace de wxWindows ?



J'ai déjà eu ce genre de problème, et il y a deux manières de le contrer :
- soit placer le header qui subit l'autre au-dessus dans la séquence
d'inclusions,
- soit s'il en dépend aussi, le laisser en dessous mais faire un #undef
UNICODE entre les deux.

Cependant :

Je m'étonne un peu de cette incompatibilité, wxWindows ayant pour objectif
d'être compatible. En fait si le préprocesseur renomme TOUTES les occurences
d'un nom de fonction, c'est sans importance, et transparent pour le
programmeur. Par contre si vous recompilez partiellement et linkez un mix,
vous vous aventurez en terrain miné.

Je ne sais plus où en est wxWindows actuellement, mais il y a peut-être
aussi lieu de vérifier qu'il ne fait pas de suppositions malheureuses du
type LPTSTR = LPSTR, sinon vous aurez des problèmes à retardement.

Hope It Helps,

Cordialement,
PZB
Avatar
Jeremie Fouche
Patrick "Zener" Brunet <http://zener131.free.fr/ContactMe> a écrit dans le
message : 4110a103$0$16394$
Bonjour.

"Jeremie Fouche" a écrit dans le
message de news:cenurr$882$
> Bonjour a tous
>
> Je suis confronté à un rigolo probleme : De nombreuses fonctions
> membres de classes wxXXX qui ont le meme nom dans l'API Windows se


voient
> renomés a cause de #define liés à l'unicode.
>
> Exemple :
> wxDC.DrawText(...) sera transformé en wxDC.DrawTextA(...) a cause de
>
> #ifdef UNICODE
> #define DrawText DrawTextW
> #else
> #define DrawText DrawTextA
> #endif
> dans winuser.h
>
> En somme, je ne peut donc pas faire l'inclusion de fichiers specifiques
> Windows dans mon projet, sous peine de voir des fonctions renommées ?


Cela
> m'ennuie car j'ai l'habitude de fonctionner avec OutputDebugString et
> DebugView.exe.
>
> Existe t il une solution a mon probleme, ou bien dois-je desormais me
mettre aux fonctionnalités de trace de wxWindows ?



J'ai déjà eu ce genre de problème, et il y a deux manières de le contrer :
- soit placer le header qui subit l'autre au-dessus dans la séquence
d'inclusions,
- soit s'il en dépend aussi, le laisser en dessous mais faire un #undef
UNICODE entre les deux.



Il me semble que cela ne changera rien, car il y a rennomage de chaque
occurence de DrawText soit en DrawTextA soit en DrawTextW en fonction de la
definition on non de UNICODE.

Cependant :

Je m'étonne un peu de cette incompatibilité, wxWindows ayant pour objectif
d'être compatible. En fait si le préprocesseur renomme TOUTES les


occurences
d'un nom de fonction, c'est sans importance, et transparent pour le
programmeur. Par contre si vous recompilez partiellement et linkez un mix,
vous vous aventurez en terrain miné.



Ah tient, oui, effectivement. Je suis surpris du comportement de Dev-C++. Je
vais faire d'autres test, bien qu'il me semble avoir penché pendant un
moment sur une recompilallation partielle du projet. Il me semble donc avoir
testé apres avoir viré tous les fichiers objets. A voir...

Je ne sais plus où en est wxWindows actuellement, mais il y a peut-être
aussi lieu de vérifier qu'il ne fait pas de suppositions malheureuses du
type LPTSTR = LPSTR, sinon vous aurez des problèmes à retardement.



Que faire dans ces conditions ? Modifier le header des definitions de
wxWindow ? LA, je pense justement m'aventurer sur un terrain miné.

Merci

--
Jérémie
Avatar
Patrick \Zener\ Brunet
Re bonjour.

"Jeremie Fouche" a écrit dans le
message de news:cet992$fvc$

Patrick "Zener" Brunet <http://zener131.free.fr/ContactMe> a écrit dans le
message : 4110a103$0$16394$
> Bonjour.
>
> "Jeremie Fouche" a écrit dans le
> message de news:cenurr$882$
> > Bonjour a tous
> >
> > [...]

Ah tient, oui, effectivement. Je suis surpris du comportement de Dev-C++.


Je
vais faire d'autres test, bien qu'il me semble avoir penché pendant un
moment sur une recompilallation partielle du projet. Il me semble donc


avoir
testé apres avoir viré tous les fichiers objets. A voir...




N'oubliez pas les .LIB et les .DLL !

> Je ne sais plus où en est wxWindows actuellement, mais il y a peut-être
> aussi lieu de vérifier qu'il ne fait pas de suppositions malheureuses du
> type LPTSTR = LPSTR, sinon vous aurez des problèmes à retardement.

Que faire dans ces conditions ? Modifier le header des definitions de
wxWindow ? LA, je pense justement m'aventurer sur un terrain miné.




Il faut simplement vérifier dans les release notes de votre version de WX
(et éventuellement chercher l'info sur le forum de l'équipe de
développement) que UNICODE et la compilation conditionnelle "TCHAR" sont
bien prévus. Il y a peut-être un paramétrage spécifique à faire, mais
certainement pas de hack des headers.
Si mes souvenirs du truc sont à jour, c'est bon.

Dans le pire des cas, restez en caractères simples au moins pour l'interface
graphique, et ça ira bien.

De toute manière, ceci n'était qu'une diversion par rapport à votre problème
fondamental : le renommage incomplet des fonctions.

Cordialement,
PZB
Avatar
Jeremie Fouche
J'ai avancé dans mon probleme, voir post sur fclc++

--
Jérémie