Funktion erwartet LPCWSTR <-> string konvertieren?



  • geeky schrieb:

    oh, ich hab mich bei TString verlesen 😉
    müsste nen TString nich sowas wie .c_str() oder so haben?

    Jupp gibts ja auch 😉 .

    LPCWSTR? schrieb:

    müsste nen TString nich sowas wie .c_str() oder so haben?

    ja aber ich bekomms nicht hin dass wsprintf es annimmt....

    Nop wsprintf geht da auch nicht, da c_str() einen konstanten Zeiger auf den Inhalt zurückgibt und der wird auch nicht verändert *g*.

    Aaaaalso:
    Wenn Du Zahlen etc einfügen willst, brauchst Du std::stringstreams. Diese musst Du dann auch via typedef so kompatible machen wie ichs Dir schon bei basic_string gepostet habe 😋 . Da kannste dann sowas schreiben:

    TStringstream ssCvt;
    ssCvt << TEXT("Das ist die Zahl fünf (") << 5 << TEXT(").");
    MessageBox(NULL, ssCvt.str().c_str(), NULL, MB_OK);
    

    Hinweis: Die Methode str() gibt den Inhalt des Streams als TString zurück, c_str() macht daraus dann einen C-String.



  • Diese musst Du dann auch via typedef so kompatible machen wie ichs Dir schon bei basic_string gepostet habe

    hm...der versuch:

    typedef std::basic_string<TCHAR> TString;
    typedef std::stringstream<TString> TStringstream;

    hat ned geklappt...
    irgendwie nervt das mit dem LPCWSTR ziemlich..deshalb weiß ich auch nicht ob meine Spriteklasse funktioniert oder nicht...
    hm...
    also wenn das schon solche probleme macht werd ich mir üebrlegen ob ich ned doch schon auf c# umsteige



  • Nop, das kann ja auch nicht klappen:

    typedef basic_stringstream<TCHAR>, char_traits<TCHAR>, allocator<TCHAR>> TStringstream;
    


  • Hab jetzt das verwendet

    typedef std::basic_string<TCHAR> TString;
    typedef std::basic_stringstream<TCHAR>, char_traits<TCHAR>, allocator<TCHAR>> TStringstream;
    

    und bekomme:

    1>c:\d\eigeneprogs\tanktics\tanktics\global.h(9) : warning C4091: 'typedef ': Ignoriert auf der linken Seite von 'std::basic_stringstream<_Elem,_Traits,_Alloc>', wenn keine Variable deklariert wurde
    1> with
    1> [
    1> _Elem=wchar_t,
    1> _Traits=std::char_traits<wchar_t>,
    1> _Alloc=std::allocator<wchar_t>
    1> ]
    1>c:\d\eigeneprogs\tanktics\tanktics\global.h(9) : error C2143: Syntaxfehler: Es fehlt ';' vor ','
    1>c:\d\eigeneprogs\tanktics\tanktics\global.h(9) : error C2059: Syntaxfehler: ','



  • Ach, son Mist, vertippt; so:

    typedef basic_stringstream<TCHAR, char_traits<TCHAR>, allocator<TCHAR>> TStringstream;
    


  • ah ok...
    damit hab ich dann:

    typedef std::basic_string<TCHAR> TString;
    typedef basic_stringstream<TCHAR, char_traits<TCHAR>, allocator<TCHAR>> TStringstream;
    

    und

    TStringstream ssCvt; 
    ssCvt << TEXT("Das ist die Zahl fünf (") << 5 << TEXT(")."); 
    MessageBox(NULL, ssCvt.str().c_str(), NULL, MB_OK);
    

    bekomme aber:

    1>c:\d\eigeneprogs\tanktics\tanktics\main.cpp(131) : error C2079: 'ssCvt' verwendet undefiniertes class 'std::basic_stringstream<_Elem,_Traits,_Alloc>'
    1>        with
    1>        [
    1>            _Elem=wchar_t,
    1>            _Traits=std::char_traits<wchar_t>,
    1>            _Alloc=std::allocator<wchar_t>
    1>        ]
    1>c:\d\eigeneprogs\tanktics\tanktics\main.cpp(132) : error C2297: '<<': Ungültig, da der rechte Operand vom Typ 'const wchar_t [24]' ist
    1>c:\d\eigeneprogs\tanktics\tanktics\main.cpp(132) : error C2297: '<<': Ungültig, da der rechte Operand vom Typ 'const wchar_t [3]' ist
    1>c:\d\eigeneprogs\tanktics\tanktics\main.cpp(132) : warning C4552: '<<': Operator hat keine Auswirkungen; Operator mit Nebeneffekt erwartet
    1>c:\d\eigeneprogs\tanktics\tanktics\main.cpp(133) : error C2228: Links von ".str" muss sich eine Klasse/Struktur/Union befinden.
    1>        Typ ist 'int'
    1>c:\d\eigeneprogs\tanktics\tanktics\main.cpp(133) : error C2228: Links von ".c_str" muss sich eine Klasse/Struktur/Union befinden.
    


  • 😃 , Okay, habs jetzt auch mal selbst getestet, das geht (vorher alles außem Kopf^^):

    #include <string>
    #include <sstream>
    #include <windows.h>
    typedef std::basic_string<TCHAR> TString;
    typedef std::basic_stringstream<TCHAR> TStringstream;
    


  • Super! Danke jetzt funktioniert es endlich 🙂



  • LPCWSTR? schrieb:

    also wenn das schon solche probleme macht werd ich mir üebrlegen ob ich ned doch schon auf c# umsteige

    Auf die Gefahr hin mich unbeliebt zu machen: 👍
    (C# yeah!)



  • Wenn Du keinen zwingenden Grund hast C++ zu machen, würde ich auch C# machen... 😉


Anmelden zum Antworten