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 :

Conversion CString vers string


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 56
    Points
    56
    Par défaut Conversion CString vers string
    Bonjour,

    Pour un projet MFC sous Visual studio 2005, j'ai besoin de convertir des CString en String, et inversement.

    J'ai vu sur internet qu'on pouvait utiliser le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Conversion de string en CString :
        CString MyCString(Mystring);                   // avec Mystring de type string.
     
    //Conversion de CString en string :
        string Mystring = MyCString.GetBuffer();   // avec MyCString de type CString.
    .

    Dans le premier cas, j'ai l'erreur suivante :
    error C2664: 'ATL::CStringT<BaseType,StringTraits>::CStringT(ATL::IAtlStringMgr *) throw()' : impossible de convertir le paramètre 1 de 'std::string' en 'ATL::IAtlStringMgr *'
    Dans le deuxième cas, j'obtiens un TCHAR au lieu d'un string

    Est ce qu'il existe d'autres moyens?
    Comment faire pour faire marcher ces deux lignes de code?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    avec Mystring.c_str();

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Cette fois, j'ai :

    C2440: 'initialisation' : impossible de convertir de 'const char *' en 'ATL::CStringT<BaseType,StringTraits>'
    En fait, ta fonction renvoie un const char *, alors que je voudrais un string.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    d'abord comment est paramétré ton projet ? en unicode ?
    et indique aussi la version de ton visual , vc6 ou vc2005/2008 ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Désolé, mais je ne sais pas où je peux voir ça (je débute).

    J'ai laissé les options de compilation par défaut il me semble, et j'utilise des TCHAR, donc je pense être en unicode, mais je ne suis pas sûr.

    Comment je peux vérifier ça?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Dans les paramètres du projet, j'ai "utiliser le jeu de caractères Unicode" (dans propriété de configuration/général).
    Est ce que c'est ce que tu me demandais?

    edit : et j'ai visual studio 2005, comme précisé dans mon premier message

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //Conversion de string en CString :
        {
        std::string Mystring="toto"; // multi-byte
        CStringA strA(Mystring.c_str());
        CString MyCString(strA);     // avec Mystring de type string. conversion unicode.
        }
        //Conversion de CString en string :
        CString MyCString=_T("toto"); // unicode
        CStringA strA(MyCString);      // multi-byte
        std::string Mystring =strA.GetBuffer();   // avec MyCString de type CString.
    as tu conscience que tu mélanges de l'unicode et du Multi-Byte ?
    par défaut en unicode :
    CString c'est de l'unicode
    string c'est du multi-byte ,pour l'unicode c'est wstring.
    CStringA c'est du multi-Byte .
    d'ou les conversions dans mon code...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Merci pour ton aide, ça marche.

    Sinon, j'utilise des strings et non des wstring car je lis dans un fichier avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    std::ifstream fichier(fichierSignet, std::ios::in);
    if (fichier)
    {
    	fichier >> string1>> string2;
    	fichier.close();
    }
    Je ne peux pas mettre des wstring dans ce cas, sinon j'ai une erreur.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/08/2010, 12h49
  2. [C] Conversion wchar_t vers string
    Par therealmancool dans le forum Windows
    Réponses: 4
    Dernier message: 04/04/2009, 20h24
  3. conversion hexadecimal vers string
    Par acognard dans le forum C#
    Réponses: 1
    Dernier message: 16/10/2007, 16h30
  4. Conversion LPCTSTR vers string
    Par The Lord of Nesquik dans le forum C++
    Réponses: 15
    Dernier message: 02/07/2006, 19h37
  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