CString und UnicodeZeichen



  • Mein Gott, als ich das Projekt erstlelt hatte wusste kein Mensch das ich jemals dieses dämliche skandinavische oe brauchen werde, also wenn du oder ich mir jetzt Vorwürfe darüber machen komm ich auch nicht weiter.

    Also muss ich doch schon mal definitiv mein Programm auf _UNICODE umstellen. Das hab ich jetzt verstanden.

    Wie bekomme ich heraus ob es sich um char oder wchar_t handelt?



  • So, jetzt blick ich gar nicht mehr durch, habe das Projekt in Unicode geändert, bekomme aber u.a. diese Fehlermeldungen:

    float fpoti;
    char* Rest;
    CString poti;
    GetDlgItemText(IDC_EX16T_POTI,poti);   // String aus Eingabefeld
    fpoti = strtod(poti,&Rest);	       // hier kommt der Fehler
    

    error C2664: 'strtod' : Konvertierung des Parameters 1 von 'class CString' in 'const char *' nicht moeglich
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden

    jetzt kennt er strtod nicht mehr oder wie, warum, wieso, weshalb? ich könnt heulen... 😞

    Ein kleiner Tipp wär sehr nett!



  • strtod erfordert Ansi-Strings als Parameter, poti ist aber mittlerweile ein Unicode-String. Abhilfe: Unicode-Version von strtod verwenden.



  • Hab ich gefunden, ist wcstod(). Wusste ich nicht! Danke!

    Noch ein merkwürdiger Fehler:

    CString strFile;
    std::ifstream file(strFile);
    

    error C2664: '__thiscall std::basic_ifstream<char,struct std::char_traits<char> >::std::basic_ifstream<char,struct std::char_traits<char> >(const char *,int)' : Konvertierung des
    Parameters 1 von 'class CString' in 'const char *' nicht moeglich
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden



  • Die C++-FileStream-Konstruktoren können nur mit char-Strings umgehen.



  • Und wie lös ich das Problemchen? Da steh ich echt aufm Schlauch. 😕



  • Gibts zwei Möglichkeiten:

    1. Wandle deinen CString in dem Fall in einen ANSI-String um: http://msdn2.microsoft.com/en-us/library/ms235631.aspx
    2. Benutze boost-Filesystem, das hat die C++-Standard-Filestreams als Widechar-Varianten im Angebot.



  • OK, werde erste variante nehmen. Danke

    Habe noch eine Frage: Was ist der Unterschied zwischen _T("bla") und L ?



  • std::ifstream -> std::wifstream benutzen

    _T() wird je nach Projekteinstellung zu ASCII oder Unicode übersetzt
    L ist nur Unicode



  • EOP schrieb:

    std::ifstream -> std::wifstream benutzen

    Äh, nein. Der Elementtyp des Streams hat nichts mit dem Typ des Konstruktorparameters für den Dateinamen zu tun.


  • Mod

    std::string ist MBCS und CString ist vermutlich Unicode. Das kann nicht passen.

    Verstuch es doch grundsätzlich mit der TCHAR Notation.

    Dann könnest Du auch einen tsring definieren:
    typedef std::basic_string<TCHAR> tstring; ...


Anmelden zum Antworten