Bonjour,
Peux on faire un programme qui est en partie Unicode ? pas entièrement ?
Car quand je met l'option de compilation Unicode; il y a plein d'erreurs ?
Merci,
Christophe
Bonjour,
Peux on faire un programme qui est en partie Unicode ? pas entièrement ?
Car quand je met l'option de compilation Unicode; il y a plein d'erreurs ?
Merci,
Christophe
Tu peux utiliser explicitement la version unicode de certaines fonctions, mais il est mieux de passer en Unicode et de corriger toutes les erreurs en remplaçant les char const *str = "abc" par des TCHAR const *str = TEXT("abc").
Et n'utiliser les conversions (de préférences, celles de Visual >= 2005: CA2T, CT2A, etc.) que quand une fonction n'existe que dans un seul des deux charsets.
Tu peux aussi tenter de passer en TCHAR avant de changer l'option Unicode, mais changer l'option en premier attirera ton attention sur les endroits où il y a conflit.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Oui, mais c'est bien galère pour obtenir une solution bancale.
Avec autant d'effort mais juste avec un peu plus de finesse on devrait rendre le code UNICODE-aware.
Généralement, remplacer les chaînes caractères en dure par l'appel de la MACRO TEXT, remplacer les char* par des PTCHAR et quelques autres manipulations permettent d'assainir rapidement le code.
Note: Si la macro TEXT() est trop longue à taper, <tchar.h> définit la macro _T() qui fait la même chose.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je me permet de confirmer les dires de bacelar et Medinoc, en effet il est tout a fait possible de mixer du code UNICODE avec code ANSI. Je développe actuellement un soft basé sur les MFC en UNICODE avec la bibliothèque IBPP en ANSI pour accéder à une base de données Firebird. J'ai un peu modifié les sources d'IBPP avec l'ajout de quelques macro TEXT et autre conversions avec TCHAR. Ma DAL utilise 2 fonctions pour convertir les CString en std::string et vice versa.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 std::string cs2std(const CString& input) { if (input.IsEmpty()) return ""; CT2CA pszString(input); return std::string(pszString); } CString std2cs(const std::string& input) { CString strTmp; if (input.empty()) { strTmp.Empty(); return strTmp; } strTmp = input.c_str(); return strTmp; }
J'ai toujours des erreurs de Link quand je compile le projet :
Pourtant je met bien les bons arguments pour GetStatus :error LNK2001: symbole externe non résolu "public: static int __stdcall CFile::GetStatus(char const *,struct CFileStatus &)" (?GetStatus@CFile@@SGHPBDAAUCFileStatus@@@Z)
J'ai tout essayé mais je trouve pas. Une solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CFileStatus fileInfo; BOOL status = CFile::GetStatus( LPCTSTR(uri), fileInfo );
Merci,
Christophe
Cette signature de CFile::GetStatus date de VS2008, pensez à mettre à niveau au moins votre SDK.
Le problème vient des options de compilation appliquées lors de la compilation du fichier cpp correspondant au fichier .obj qui génère l'erreur de link.
Cet .obj n'aurait jamais du interpréter la déclaration de la méthode comme il semble l'avoir compris, il veut la version ASCII alors qu'il aurait dû vouloir la version UNICODE.
Vérifiez que la constante de compilation "UNICODE" est bien défini lors de la compilation du fichier cpp correspondant.
Si c'est le cas, utilisez l'option /P (http://msdn.microsoft.com/en-us/library/8z9z0bx6.aspx) pour savoir quel cocktail de constantes de compilation fait que la signature de la méthode soit mal calculé.
Partager