[VORSCHLAG] Unicode - TCHAR in die FAQ



  • 'n abend, grüezi, servus, bonjour, hi

    war grad mit suchen beschäftigt, folgende begriffe *Unicode* OR *TCHAR*, ergeben doch knapp 14 Seiten.
    Und wenn ichs recht gesehn hab, in den letzten 2 Monaten mehrere Threads dazu.
    Also Konversionen, _T(x) Macro, string, etc__
    Wie wärs denn mit nem FAQ Eintrag? Oder gleich nem Artikel? Denn es scheint auch erfahrenen Entwicklern hier am Herzen zu liegen, dass man Unicode Kompatibel bleibt.
    Also wichtige Dinge wie:
    char/wchar_t/TCHAR
    LPCSTR/LPCTSTR/LPCWSTR
    sprintf/wsprintf/_tsprintf (vor allem welches sind die kompatiblen Versionen)
    und wie geht es mit std::string/stringstream

    Wenn es ein Zeitproblem ist, ich könnt was schreiben, bin nur nicht sicher, wie richtig mein Wissen ist.

    Mit Grütze
    ein Mundar-tiger



  • 👍 Da wär ich auch dafür!



  • ...vielleicht kann man hier mal ne Sammlung der verschiedenen Probleme machen, die sich stellen, und dann kann jemand (ich?) das umschreiben, oder ein mod kann den thread bearbeiten, und in die FAQ pushen.

    Weis jetzt auch gar nicht, ob das nur Windows(VS) Programme betrifft???



  • TCHAR ist AFAIK Windows spezifisch und gehört zu WinAPI und CRT.
    Wenn jemand was schreibt kann ich das gern in die FAQ verschieben...



  • Was ich mal hier gelernt hab:

    Um ohne Tippaufwand zwischen Unicode und Multibyte Char zu switchen, sollte man immer möglichst das TCHAR Makro verwenden. Wenn in den Projektsettings Unicode Charset definiert ist, wird ein "wchar_t" eingesetzt, ansonsten "char"
    ( siehe auch: MSDN )

    Um Stringliterale ( const char* ) zu casten, soll man das _T(x) Makro verwenden.
    Etwa so:

    MessageBox( hwnd, _T("Text"), _T("Titel"), MB_OK );
    

    Die Standard Klassen String und Stringstream haben zwar eine Wide-Char Variante (wstring, wstringstream), für TCHAR muss man aber selber was definieren.
    Etwa so:

    typedef std::basic_string<TCHAR>        _Tsring;
    typedef std::basic_stringstream<TCHAR>  _Tsringstream;
    

    printf() gibt es als Unicode Version wprintf(),
    und auch eine generische Version

    _tprintf()
    

    die je nach Projekteinstellung entsprechend funktioniert.


Anmelden zum Antworten