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 :

Convertion CString => char *


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 152
    Par défaut Convertion CString => char *
    Bonjour,

    Comment convertir un "CString" en "char *" :

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    c'est un multipost, ça... En plus, tu as déjà la réponse...
    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
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    CString::GetString()

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Comme dit dans son autre post, la classe CString ne possède pas de méthode GetString() (quel que soit le document dont vous tirez cela, il doit être erroné)
    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
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Tu peux avoir raison si tu utilises Visual C++ 6.0

    Mais avec la version .NET la classe CString a été refondu en une classe template plus performante et partage les libraires MFC et ATL

    Le membre GetString existe effectivement car la classe template CStringT dont CString est un typedef dérive de la classe template CSimpleStringT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template<typename BaseType, class StringTraits> class CStringT : 
    public CSimpleStringT<BaseType>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef ATL::CStringT<TCHAR, StrTraitMFC<TCHAR>> CString;
    Si GetString() n'est pas un membre de CString mais c'est un membre de sa classe de base CSimpleStringT et donc un appel CString::GetString() est faisable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PCXSTR GetString() const throw();
    avec PCXSTR un typedef LPCSTR ou LPCWSTR selon que l'UNICODE est fixé ou pas et tu obtient finalement ton char*.

    Et donc avec une version supérieure à 6.0 je crois que tu as ton CString en char*

    Mais tu peux faire des conversions comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     CString strText = "Quel case tête la conversion";
    char* pszText;
    pszText = (LPTSTR) (LPCTSTR) strText;
    Voilà

    Gabrielly

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Ah, c'est du ATL...

    Je me demande si c'est toujours une classe de base en MFC normal, ça ne m'étonnerais pas.
    De puls, je n'ai pas consulté la doc de visual 6, mais celle du site de MSDN, où la classe CString n'a toujours pas de méthode GetString...
    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
    Inactif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 152
    Par défaut
    merci pour ta reponce detailler

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    mais convertir un pointeur const en non-const, ça va faire hurler bcp de monde.
    un conseil, signale-le explicitement avec l'opérateur c++ const_cast pour t'éviter de créer des bugs quand tu retoucheras à ton code...
    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.

  9. #9
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Voici les classes partagées entre MFC et ATL après le 6.0

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfclassessharedbetweenmfcandatl.asp

    voici la classe template dont CString est un typedef

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfcstringt.asp

    PCXSTR GetString( ) const throw( );
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfcsimplestringtgetstring.asp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CString str = "Je convertit en const char*";
    const char* pcszText = str.GetString(); // j'empreinte GetString() par héritage
    J'utilise CString indifféremment d'un projet MFC ou ATL.

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Ah, je vois, c'est à partir de .net...
    Les headers signalés dans l'aide ne sont ni dans visual 6, ni dans le SDK de février 2003... Il serait temps que je me mette à jour (mais €€)
    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.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Par défaut
    Sinon, j'utilse

    CString str;
    str.GetBuffer();

    et ca marche

    ++

  12. #12
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    En effet, GetString n'appartient pas à CString!!! Si on saisie le point, il s'affichera en effet dans la liste mais on aura l'erreur:

    error C2664: 'CUtils:rocessError'*: impossible de convertir le paramètre 1 de 'ATL::CSimpleStringT<BaseType,t_bMFCDLL>:CXSTR' en 'char *'
    with
    [
    BaseType=char,
    t_bMFCDLL=true
    ]
    alors qu'avec GetBuffer() qui retourne aussi PCXSTR, je n'ai pas cette erreur!

    En fait, qu'est-ce que cela fait un GetBuffer sans paramètre, quand est-ce qu'on lui donne un paramètre!

    PS: désolé si j'ai remonté ce vieux sujet
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

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

Discussions similaires

  1. Convertion string en char*
    Par krolineeee dans le forum C++
    Réponses: 9
    Dernier message: 24/07/2006, 14h35
  2. TinyXml, CString et char *
    Par Bmagic dans le forum MFC
    Réponses: 1
    Dernier message: 09/06/2006, 12h01
  3. Convertion CString en char *
    Par Bmagic dans le forum MFC
    Réponses: 1
    Dernier message: 07/06/2006, 16h09
  4. [unicode] Convertir CString en Char[]
    Par dacid dans le forum Visual C++
    Réponses: 7
    Dernier message: 31/05/2006, 09h22
  5. [MFC] Problème de conversion CString vers Char *
    Par Darkenshin dans le forum MFC
    Réponses: 10
    Dernier message: 02/12/2005, 14h42

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