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.


  • Mod

    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.


Anmelden zum Antworten