Von integer zu LPCWSTR



  • morgen 😃

    kann mir da jemand bitte helfen, ich versuche nämlich einen integer in einen LPCWSTR(Winapi Dt.) umzucasten.

    LPCWSTR IntToOther(int typ2)
    {
    	std::stringstream Str; 
        Str << typ2; 
        LPCWSTR d; 
        Str >> d; 
    	return d;
    }
    
    MessageBox(sW_reg,"WINmAIN", IntToOther(zahl), NULL);
    

    err:

    error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'LPCWSTR' akzeptiert (oder keine geeignete Konvertierung möglich)
    1>        c:\program files\microsoft visual studio 8\vc\include\istream(1137): kann 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char *)' sein [bei der Verwendung der argumentbezogenen Suche gefunden]
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        c:\program files\microsoft visual studio 8\vc\include\istream(1139): oder "std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char &)" [bei argumentbezogenem Lookup gefunden]
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        c:\program files\microsoft visual studio 8\vc\include\istream(1141): oder "std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char *)" [bei argumentbezogenem Lookup gefunden]
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        c:\program files\microsoft visual studio 8\vc\include\istream(1143): oder "std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char &)" [bei argumentbezogenem Lookup gefunden]
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    


  • nimm lieber std::wstring



  • LPCWSTR steht für const wchar_t*. Dann kannst du nicht erwarten, dass du aus einem char-Stream einen wchar_t bekommst!

    template<typename _CharType, typename _Source>
    std::basic_string<_CharType> to_string(_Source const& data)
    {
        std::basic_ostringstream<_CharType> ss;
        return ss << data, ss.str();
    }
    

    ... nutzen:

    int my_var(412);
    const std::wstring result(to_string<wchar_t, int>(my_var));
    

    to_string<wchar_t, int>(my_var) . Das 1. gibt an, ob du nun char oder wchar_t nehmen willst und das 2. halt deinen Variablentyp und dann in Klammern die Variable 😉 (vereinfacht ausgedrückt! 🙂 ) ...
    edit
    Tippfehler im snippet ...



  • Achja und wenn dann eine Funktion einen LPCWSTR will, nimmst du einfach to_string<wchar_t, int>(my_var).c_str() 🙂



  • return ss << data, ss.str();
    

    LOL



  • @devil:

    i ist ein Integer.

    MessageBox(NULL,"Titel", to_string<wchar_t, int>(i).c_str() , NULL);
    

    result is :

    error C2065: 'to_string': nichtdeklarierter Bezeichner
     error C2062: 'wchar_t'-Typ unerwartet
    

    das kann ich mir nun wirklich nicht mehr erklären 😞



  • MessageBox(NULL, to_string<wchar_t, int>(i).c_str(), L"Fensterschleife" , NULL);
    

    natürlich so ^^

    hab nur titel und nachricht vertauscht. funktioniert aber trodzdem nicht 😞



  • sorry für dreifachpost.

    ich hab vergessen meine header zu speichern 😃

    nun ich hab noch keine templates gemacht und folgendes kommt:

    error C2059: Syntaxfehler: 'template'
    

  • Mod

    (D)Evil schrieb:

    template<template _CharType, typename _Source>
    std::basic_string<_CharType> to_string(_Source const& data)
    {
        std::basic_ostringstream<_CharType> ss;
        return ss << data, ss.str();
    }
    

    ... nutzen:
    [cpp]

    _CharType und _Source sind reservierte Bezeichner. Die Verwendung des Kommaoperators erhöht nicht die Qualität. Der Typ des Arguments kann der Compiler selbst ermitteln, dieser muss beim Aufruf nicht angegeben werden. Es gibt auch noch so etwas wie lexical_cast. Kleiner Tippfehler in der ersten Zeile.


Anmelden zum Antworten