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 :

Convertir CString en PString


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Par défaut Convertir CString en PString
    Bonjour a tous,

    J'ai recupere un programme que je dois modifier. Or celui-ci a pour l'instant toujours ete compile en mode debug, et il marche bien comme ca. Par contre, lorsque je veux le compiler en mode release, il y a plein d'erreurs de conversion ... dont celle du titre ...

    Comment convertir un CString en PString ???

    Merci de m'aider, je ne trouve rien sur le net !

    Greg>

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Est-ce que quelque chose comme ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CString mfc_str("tutu");
    PString bld_str(static_cast<LPCTSTR>(mfc_str)):

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Par défaut
    Hello,

    Je n'ai pas tester ta reponse ... j'ai trouve un truc qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CString varCString( "CString variable" );
    PString varPString(  (char *) *varCString );

    Merci d'avoir repondu !

    Greg

  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
    C'est bizarre... À ma connaissance, CString ne redéfinit pas l'opérateur *, donc cela ne devrait pas compiler...
    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
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Je pense que c'est une faute de frappe en recopiant le code.

  6. #6
    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
    Même sans l'étoile, le cast ne devrait pas marcher, car CString ne définit pas non plus de cast vers char* ni TCHAR*. Et pour les classes, il faut forcément que le cast soit défini, même pour un cast C-style, non?
    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.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Même sans l'étoile, le cast ne devrait pas marcher, car CString ne définit pas non plus de cast vers char* ni TCHAR*. Et pour les classes, il faut forcément que le cast soit défini, même pour un cast C-style, non?
    Effectivement. Normalement, son code ne compile pas.
    Mais quid en V6?

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Je viens de vérifier. En fait son code marche... Par contre, j'ai du mal à voir ce qu'il se passe. Le débugger à l'air de m'afficher à peu près n'importe quoi ???

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bon, voilà. Je crois que je comprend ce qu'il se passe.
    On a un appel implicite à (LPCTSTR) (enfin PCXSTR à la nouvelle sauce), ensuite le pointeur est déréférencé et recasté en char*.
    Conséquence : ça compile
    Mais : l'adresse est la valeur du premier caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CString toto("toto");
    char c=*str;
    char*pc = (char*)*str;
    c==pc=='t'
    Donc, dès qu'il va faire *pc ->


    [EDIT] :
    Voilà un exemple indépendant des MFC de ces problèmes d'opérateur de conversion :
    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
     
    class A
    {
    public :
        A()
           :dummy("tutu")
        {}
        operator char const*()
        {
            return dummy.c_str();
        }
     
    private:
       std::string dummy;
    };
     
    int main()
    {
       A a;
       char c = *a;
     
       return 42;
    }

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

Discussions similaires

  1. Convertir cstring en hexa
    Par rodgeurette dans le forum Visual C++
    Réponses: 7
    Dernier message: 17/07/2007, 11h52
  2. Convertir CString en const char*: ca marche pas
    Par MDiabolo dans le forum Visual C++
    Réponses: 12
    Dernier message: 21/11/2006, 18h10
  3. VC++,comment Convertir CString to Int
    Par mqsi dans le forum MFC
    Réponses: 2
    Dernier message: 26/10/2006, 14h31
  4. Convertir CString to CTime
    Par Oraman dans le forum MFC
    Réponses: 3
    Dernier message: 11/08/2006, 13h38
  5. [unicode] Convertir CString en Char[]
    Par dacid dans le forum Visual C++
    Réponses: 7
    Dernier message: 31/05/2006, 09h22

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