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

C++ Discussion :

Conversion LPCTSTR vers string


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par d�faut Conversion LPCTSTR vers string
    Bonjour,
    Voici un petit code devant permettre d'afficher un message box en fonction de param�tres choisis pas l'utilisateur. Le voici :

    #include <stdio.h>
    #include <windows.h>
    #include <iostream>
    #include <sstream>

    using namespace std;

    template<typename T>
    std::string to_string( const T & Value )
    {
    // utiliser un flux de sortie pour cr�er la cha�ne
    std::ostringstream oss;
    // �crire la valeur dans le flux
    oss << Value;
    // renvoyer une string
    return oss.str();
    }

    int main()
    {
    std::string sIpText;
    std::string sIpCaption;
    LPCTSTR IpText;
    LPCTSTR IpCaption;
    UINT uType;
    char key;

    cout << "Message Box Text:" << endl;
    cin >> sIpText;
    cout << "Message Box Title:" << endl;
    cin >> sIpCaption;
    cout << "Message Box Type:" << endl;
    cout << "(a) Error" << endl;
    cout << "(b) Exclamation" << endl;
    cout << "(c) Information" << endl;
    cout << "(d) Question " << endl;

    switch(key)
    {
    case 'a':
    uType = MB_ICONERROR;
    break;

    case 'b':
    uType = MB_ICONEXCLAMATION;
    break;

    case 'c':
    uType = MB_ICONINFORMATION;
    break;

    case 'd':
    uType = MB_ICONQUESTION;
    break;

    default:
    return EXIT_SUCCESS;
    break;
    }

    IpText = to_string(sIpText);
    IpCaption = to_string(sIpCaption);

    MessageBox(0, IpText, IpCaption, MB_TASKMODAL);

    system("PAUSE");
    }
    Mais la conversion ne fonctionne pas. Voici ce que me dit le compilateur :
    61 cannot convert `std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to `const TCHAR*' in assignment
    pour les deux lignes :
    IpText = to_string(sIpText);
    IpCaption = to_string(sIpCaption);

    Quelqu'un pourrait-il m'aider ?
    Merci d'avance.

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Quelqu'un pourrait-il m'aider ?
    Lis ton code, �a devrait suffire.
    Il faut utiliser sIpText et pas IpText par exemple.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par d�faut
    Ha oui je me suis gourr� de conversion !
    Et...comment on fait pour convertir une string en LPCTSTR ? ^^
    [EDIT] C'est bon ! (FAQ)
    Merci !

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Et...comment on fait pour convertir une string en LPCTSTR ? ^^
    Tu peux pas (en supposant que LPCTSTR c'est TCHAR*).
    N�anmoins tu peux facilement obtenir un const char* � partir d'un std::string, ce qui devrait suffire si tu veux pas passer en Unicode.

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Tu ne peux pas directement, mais il me semble par contre que les CONSTRUCTEURS de std::string/std::wstring acceptent ind�pendamment des caract�res courts ou larges (� moins que ce ne soient les stream, dans ce cas ostringstream aidera).

    � ce moment-l�, pour convertir en LPCWSTR, (ou LPCTSTR si tu compiles en unicode); il suffit de passer par une wstring et d'appeler sa m�thode c_str().

    Mon conseil, pour ne pas trop t'emb�ter avec les #ifdef UNICODE, c'est de refaire quelques typedefs
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    #ifdef _UNICODE //Pour la CRT, c'est la version avec underscore
    typedef std::wstring tstring;
    typedef std::wostringstream tostringstream;
    #else
    typedef std::string tstring;
    typedef std::ostringstream tostringstream;
    #endif
    � ce moment-l�, il te suffit d'instancier une tstring (ou si le constructeur ne l'accepte pas, de passer par un tostringstream) pour r�cup�rer un LPCTSTR en appelant la m�thode tstring::c_str().

    Edit: Si c'est bon, clique sur
    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.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par d�faut
    Ben j'ai pas tout compris.
    Et puis dans la FAQ, y'avais �crit mot pour mot "Comment convertir une string en un objet de n'importe quel type ?"
    Alors j'ai essay� ca :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include <stdio.h>
    #include <windows.h>
    #include <iostream>
    #include <sstream>
     
    using namespace std;
     
    template<typename T>
    bool from_string( const std::string & Str, T & Dest )
    {
        // créer un flux à partir de la chaîne donnée
        std::istringstream iss( Str );
        // tenter la conversion vers Dest
        return iss >> Dest != 0;
    }
     
     
    int main()
    {    
        std::string sIpText;
        std::string sIpCaption;
        LPCTSTR IpText;
        LPCTSTR IpCaption;
        UINT uType;
        char key;
     
        cout << "Message Box Text:" << endl;
        cin >> sIpText;
        cout << "Message Box Title:" << endl;
        cin >> sIpCaption;
     
        //cout << "Message Box Type:" << endl;
        //cout << "(a) Error" << endl;
        //cout << "(b) Exclamation" << endl;
        //cout << "(c) Information" << endl;
        //cout << "(d) Question " << endl;
     
        //switch(key)
        //{
                   //case 'a':
                   //uType = MB_ICONERROR;
                   //break;
     
                   //case 'b':
                   //uType = MB_ICONEXCLAMATION;
                   //break;
     
                   //case 'c':
                   //uType = MB_ICONINFORMATION;
                   //break;
     
                   //case 'd':
                   //uType = MB_ICONQUESTION;
                   //break;
     
        //}
     
        from_string(sIpText, IpText);
        from_string(sIpCaption, IpCaption);
     
     
        MessageBox(0, IpText, IpCaption, MB_TASKMODAL);
     
        system("PAUSE");
    }
    Evidement ca marche pas :
    In function `bool from_string(const std::string&, T&) [with T = const TCHAR*]':
    58 instantiated from here
    14 ambiguous overload for 'operator>>' in 'iss >> Dest'
    note C:\Dev-Cpp\include\c++\3.4.2\istream:687 candidates are: std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, unsigned char*) [with _Traits = std::char_traits<char>] <near match>
    note C:\Dev-Cpp\include\c++\3.4.2\istream:687 std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, signed char*) [with _Traits = std::char_traits<char>] <near match>
    ...

  7. #7
    Membre chevronn�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par d�faut
    Citation Envoy� par The Lord of Nesquik
    Mais la conversion ne fonctionne pas. Voici ce que me dit le compilateur :

    pour les deux lignes :
    IpText = to_string(sIpText);
    IpCaption = to_string(sIpCaption);

    Merci d'avance.
    le template to_string() sert � convertir un objet quelconque en string; son retour ne peut-�tre que du type string, donc l'utiliser pour sortir un LPCTSTR n'a pas de sens...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [C] Conversion wchar_t vers string
    Par therealmancool dans le forum Windows
    R�ponses: 4
    Dernier message: 04/04/2009, 20h24
  2. Conversion CString vers string
    Par CyberSlan dans le forum MFC
    R�ponses: 7
    Dernier message: 26/05/2008, 18h24
  3. conversion hexadecimal vers string
    Par acognard dans le forum C#
    R�ponses: 1
    Dernier message: 16/10/2007, 16h30
  4. R�ponses: 5
    Dernier message: 04/06/2007, 17h07
  5. [DOM] Conversion vers String
    Par jymmy dans le forum Format d'�change (XML, JSON...)
    R�ponses: 3
    Dernier message: 02/05/2007, 14h25

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