combine two LPCWSTR
-
ich versuche eine funktion zu schreiben, die zwei LPCWSTR zusammenfügt:
inline LPCWSTR combine(LPCWSTR _one, LPCWSTR _two){ std::wstringstream sstr; sstr << _one << _two; return sstr.str().c_str(); }
leider funktioniert das nicht so ganz und es werden chinesische zeichen ausgegeben, es gibt warscheinlich also irgentwo probleme mit einer konvertierung von const char* zu LPCWSTR, welche ich aber garnicht sehe?
wie kann ich die funktion umschreiben, damit sie funktioniert?
-
Du gibst einen pointer auf die Innereien eines funktionslokalen Objekts zurueck das nach return nicht mehr existiert...
-
wie soll ich es denn dann machen? also was du meinst ist, dass auf sstr hinter return nicht mehr zugegriffen werden kann oder wie?
dann müsste es ja folgendermaßen gehen:LPCWSTR pcwTmp; std::wstringstream sstr; sstr << _one << _two; pcwTmp = sstr.str().c_str(); return pcwTmp;
tut es aber leider auch nicht
-
std::wstring combine(LPCWSTR one, LPCWSTR two) { std::wstring str = one; str += two; return str; }
-
funktioniert leider immer noch nicht
ich hab aber mal das zusammenfügen rausgenommen und dabei festgestellt, dass es an der konvertierung von std::wstring
zu LPCWSTR probleme gibt, denn std::wstring::c_str() gibt einen const wchar_t* zürück während LPCWSTR ein const wchar* ist.meine frage ist also, wie ich wchar_t* in wchar* umwandeln kann und ob es nicht auch einen std::string gibt, welcher direkt einen wchar* liefert..
-
WCHAR ist normalerweise nur ein typedef auf wchar_t. Was genau für ein Problem gibt es denn?
-
chinesische zeichen werden ungewollt ausgegeben..
-
Das kann alle möglichen Gründe haben, meistens dass du etwas falsch machst. Zeig mal etwas Code...
-
danke, aber ich glaube es hat sich gerade so halb erledigt, ich habe es für 2 zwecke in meinen code eingebaut, in einem funktioniert es jetzt, im anderen ist das problem warscheinlich ein wenig komplexer, ich setze mich da heute abend nochmal dran
-
gamer8o4 schrieb:
LPCWSTR pcwTmp; std::wstringstream sstr; sstr << _one << _two; pcwTmp = sstr.str().c_str(); return pcwTmp;
tut es aber leider auch nicht
Klar tut das nicht. Ist ja auch dasselbe wie in deinem ersten Snippet in grün.
-
Das geht nur indem Du ein temporäres Objekt zurückgibst das eine default Konvertierung in einen LPCWSTR hat.
Ich sage mal: Mit der CStringT Klasse aus der ATL geht das.