std::string-Funktionen unicodefähig machen



  • Wenn du die STL-Anteile auf UNICODE umstellen willst, mußt du das schon komplett machen - das schließt die Verwendung der wchar_t-Streamklassen (wistream, wfstream etc) und -Standardstreams (wcin, wcout, wcerr und wclog) mit ein.



  • Ersetze 'cout' durch 'wcout' (... und 'wcin', 'wcerr' etc.).



  • Danke Konrad ! Leider hab' ich zu einem obigen Problem immernoch eine Frage. Mir ist immernoch nicht klar, wie ich z.B. bei der Funktion ::GetGetFileAttributes() einen wstring-Typ (den ich durch die obige Umwandlung bekommen habe) in den geforderten LPCSTR-Typ umwandeln (casten) kann. Vielleicht hast Du ja eine Idee für mich parat!?

    Gruß Ernst



  • Hallo, mit casten ist da nichts. Das erledigt aber die Methode 'c_str()':

    wstring test = L"Hallo, Welt";
    ::MessageBoxW(0, test.c_str(), 0, 0);
    


  • Danke hast mir sehr weitergeholfen ! Gruß Ernst.



  • generell mach ich das meistens auch so - also das ich alles in unicode entwickel

    bei vielen ist aber die moeglichkeit beliebt den code fuer multibyte und unicode compilierbar zu machen

    #ifndef DString
    	#if ((defined UNICODE) || (defined _UNICODE))
    		#define DString std::wstring
    		#define DIfStream std::wifstream
    		#define DOfStream std::wofstream
    		#define DfStream std::wfstream
    	#else
    		#define DString std::string
    		#define DIfStream std::ifstream
    		#define DOfStream std::ofstream
    		#define DfStream std::fstream
    	#endif
    #endif
    
    //...
    DString str = _T("No matter");
    //...
    //dann geht immer wunderbar 
    ::MessageBox(0, str.c_str(), str.c_str(), MB_OK);
    


  • Das ist ja grässlich - Wie wärs mit typedef?



  • Mr Evil schrieb:

    //dann geht immer wunderbar
    ::MessageBox(0, str.c_str(), str.c_str(), MB_OK);

    typedef std::basic_string<TCHAR> tstring;
    //... etc. pp.
    


  • Nach langer Umwandlungsarbeit hänge ich noch an einem weiteren kleinen Problem! Folgende Codezeile will der Compiler nicht umsetzen :

    if( wcscmp(fileName.cFileName, L".") != NULL  && wcscmp(fileName.cFileName, L"..") != NULL)
    		{
            ...
            }
    

    Da cFileName ein CHAR_WIN32_FIND_DATA-Typ ist, verträgt er sich nicht mit meiner wcscmp-Funktion, die natürlich einen const wchar_t* erwartet. Wie kann ich die Problematik an einfachsten lösen?

    Danke im voraus, Gruß Ernst.



  • Biste dir sicher, das CHAR_WIN32_FIND_DATA ein Typ ist? Selbst die MSDN spuckt null Ergebnisse aus.



  • Ne, Du hast recht !!! Ist ein CHAR[] ! Sorry.


Anmelden zum Antworten