Konvertierung von 'const char *' nach 'const wchar_t *' nicht möglich



  • Hi,

    ich probier den CodeGear RAD Studio für Microsoft Windows aus. Dazu hab ich einfach mal ein neues Projekt erstellt und einen einfachen Button erstellt.

    Wenn man auf den Button draufklickt soll die funktion ClickText aufgerufen werden und ein Fenster mit dem Text "Hello World!" soll erscheinen.

    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ClickText(TObject *Sender)
    {
    	Application->MessageBox("Hello World!", "", 0);
    }
    

    Wenn ich dieses Projekt jetzt kompilieren will, dann wird mir folgende Fehlermeldung ausgegeben:

    E2034 Konvertierung von 'const char *' nach 'const wchar_t *' nicht möglich
    E2342 Keine Übereinstimmung des Typs beim Parameter 'Text' ('const wchar_t *' erwartet, 'const char *' erhalten)

    Hab hier im Forum zwar einen ähnlichen Thread gefunden, der mir aber net sonderlich weitergeholfen hat.

    Wie kann ich den Fehler beheben?

    Von einer Freundin habe ich ein Script bekommen zum C++ lernen, das genau auf den Editor abgestimmt ist. Deswegen versteh ich das ganze nicht.

    Grüße aus Japan
    Sören



  • Die einfachste Variante in diesem Fall wäre, direkt wchar_t -Literale zu benutzen: L"Hello World!"

    So entfällt die eher lästige Konvertierung 😉

    MfG



  • Hallo

    Du benutzt die neue Generation des Builders, der mit UnicodeString anstelle AnsiString arbeitet. Die String-Literale müßen damit auch wide anstelle narrow sein, was mit dem L-Präfix gemacht werden kann :

    Application->MessageBox(L"Hello World!", L"", 0);
    

    Es gibt auch ein Makro das das Präfix entsprechend der Umgebung automatisch richtig setzt, ist mir aber gerade entfallen.

    bis bald
    akari



  • Vielen Dank für die schnelle hilfe. 🙂

    Jetzt funktioniert alles so wie es soll.

    Grüße aus Japan
    Sören



  • Gibt es zu diesem Problem nicht auch eine Option im Builder, die man einstellen kann bzw. muss ??
    Ich habe das gleiche Problem in einigen Routinen, die ich von Borland 6.0 übernommen habe, und will diese nicht überall ändern.


Anmelden zum Antworten