Salut
est-it possible de rediriger cerr<< pour l,afficher dans un AfxMessageBox()
merci
Version imprimable
Salut
est-it possible de rediriger cerr<< pour l,afficher dans un AfxMessageBox()
merci
C'est plutôt un problème de C++ à vrai dire. Je déplace y'a plus de chances dans le forum C++.
Une solution que j'avais explorée pour cout c'est de remplacer le filebuf par le tient via un std::cerr.rdbuf( &mon_filebuf ); Un truc du genre:
Je laisse Luc commenter son approche à base de localeCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 template<class Elem, class Traits> class afx_filebuf : public std::basic_filebuf<Elem, Traits> { protected: virtual std::streamsize xsputn(const Elem *Ptr, std::streamsize Count) { // recopier <Count> chars dans une chaine et l'afficher } }; // object static (devrait etre singleton) utilisé pour modifier cerr struct InitAfxCerr { // code de modif dans le constructeur InitAfxCerr() { std::cerr.rdbuf( &this->afxbuf ); } afx_filebuf<char, std::char_traits<char> > afxbuf; }; static InitAfxCerr init_afxcerr;
http://hermitte.free.fr/Info/C++/locale.tar.gz
Oulah! C'est vieux ce que j'avais fait. Le but était de changer des facets pour traiter les problèmes liés à la locale. Typiquement les problèmes d'accents. Le résultat était moyennement convaincant dans la mesure où les cin/cout/... de VC6 ne pouvaient pas être imbués et que je n'avais pas trouvé comment correctement lire avec accents avec cette approche.
Bref. Cela n'avait pas grand raport avec le problème de Philippe.
L'approche qui consiste à définir son propre streambuffer est celle qui me parait la plus idiomatique -- c'est comme cela que l'on procède pour communiquer via sockets avec les flux du C++.
J'avais utilisé ça pour modifier les accents sur cout. ca marche si on affiche des string / char *, mais pas si on affiche un caractère unique...