Probleme mit char array und unicode



  • Hallo.

    Ich versuche gerade MFC Anwendungen für WinCE zu schreiben.

    Nun habe ich aus eine Tutorial folgenden Quelltext

    // Hier Fehler beim Erstellen der Stifte abfangen
        catch (CResourceException& CEx)
        {
            char acErrText[128];
            CEx.GetErrorMessage( acErrText, sizeof(acErrText));
            MessageBox (acErrText,"FEHLER");
        }
    

    Dieser ergibt bei mir folgenden Fehler:

    1>.\GDIFuncView.cpp(77) : error C2664: 'CSimpleException::GetErrorMessage': Konvertierung des Parameters 1 von 'char [128]' in 'LPTSTR' nicht möglich
    1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>.\GDIFuncView.cpp(78) : error C2664: 'CWnd::MessageBoxW': Konvertierung des Parameters 1 von 'char [128]' in 'LPCTSTR' nicht möglich
    1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    Nun konnte ich einen Fehler beheben indem ich das array bei GetErrorMessage caste:

    // Hier Fehler beim Erstellen der Stifte abfangen
        catch (CResourceException& CEx)
        {
    	char acErrText[128];
    	CEx.GetErrorMessage((LPTSTR)acErrText, sizeof(acErrText));
    	MessageBox(acErrText,"FEHLER");
        }
    

    Wenn ich das allerdings bei der MessageBox auch mache bekomme ich folgenden Fehler

    1>.\GDIFuncView.cpp(81) : error C2664: 'CWnd::MessageBoxW': Konvertierung des Parameters 2 von 'const char [7]' in 'LPCTSTR' nicht möglich
    1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    Wie mache ich das hier richtig?

    Vielen Dank.


  • Mod

    Verwende die TCHAR Notation...

    TCHAR acErrText[128]; 
    CEx.GetErrorMessage( acErrText, _countof(acErrText)); 
    MessageBox (acErrText,_T("FEHLER"));
    

    Wieder mal eine Frage die mindestens 1000mal in diesem Forum schon beantwortet wurde...



  • Martin Richter schrieb:

    Verwende die TCHAR Notation...

    TCHAR acErrText[128]; 
    CEx.GetErrorMessage( acErrText, _countof(acErrText)); 
    MessageBox (acErrText,_T("FEHLER"));
    

    Funktioniert! Danke!

    Martin Richter schrieb:

    Wieder mal eine Frage die mindestens 1000mal in diesem Forum schon beantwortet wurde...

    Entschuldigung. 🙄 Die Suchbegriffe die ich verwendet hatte brachten mir nicht die Lösung.


Anmelden zum Antworten