Funktion erwartet LPCWSTR <-> string konvertieren?
-
wozu soll dieser LPCWSTR eigentlich gut sein wenn man damit nur direkten Text verwenden kann!?!
gibts denn da keine einfache Möglichkeit?
sowas wie:#include <windows.h> #include <string> typedef std::basic_string<TCHAR> TString; void func(){ int wert=10; TString ts; ts="Mein Wert: "+wert; dv->DrawText(ts,...); }
-
oh, ich hab mich bei TString verlesen

müsste nen TString nich sowas wie .c_str() oder so haben?
-
LPCWSTR? schrieb:
wozu soll dieser LPCWSTR eigentlich gut sein wenn man damit nur direkten Text verwenden kann!?!
Um dem Programmierer das Leben schwer zu machen

Ich wette solche Dinge sind auch mit dafür verantwortlich das MS das .NET-Framework ins Leben gerufen hat
-
müsste nen TString nich sowas wie .c_str() oder so haben?
ja aber ich bekomms nicht hin dass wsprintf es annimmt....
-
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...
