IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Unicode en partie


Sujet :

MFC

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 907
    Par défaut Unicode en partie
    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

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    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.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 455
    Par défaut
    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.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    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.

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 564
    Par défaut
    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;
    }

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 907
    Par défaut
    J'ai toujours des erreurs de Link quand je compile le projet :
    error LNK2001: symbole externe non résolu "public: static int __stdcall CFile::GetStatus(char const *,struct CFileStatus &)" (?GetStatus@CFile@@SGHPBDAAUCFileStatus@@@Z)
    Pourtant je met bien les bons arguments pour GetStatus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	CFileStatus fileInfo;
    	BOOL status = CFile::GetStatus( LPCTSTR(uri), fileInfo );
    J'ai tout essayé mais je trouve pas. Une solution ?

    Merci,
    Christophe

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 455
    Par défaut
    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é.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TSplitter] 3 parties...
    Par agh dans le forum Delphi
    Réponses: 3
    Dernier message: 07/09/2006, 13h11
  2. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 14h38
  3. [debutant] unicode
    Par dadou91 dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 23/05/2003, 10h12
  4. selectionner une partie d'un TImage
    Par bidochon dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/02/2003, 19h08
  5. Réponses: 3
    Dernier message: 09/02/2003, 01h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo