komischer Fehler / Hilfe gesucht



  • Habe ein Problem

    Ich versuche C++ zu lernen, habe mir ein Tutorial gesucht schreibe das erste Beispiel ab... und bekomme einen dämlichen Fehler der wie folgt lautet:

    c:\dokumente und einstellungen\matt\desktop\game_01\game_01\game_01.cpp(7) : error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [6]' in 'LPCWSTR' nicht möglich
    Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    das dazugehörige Programm:

    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
    {
    	MessageBox(0,"Hallo Welt","Mein erstes Programm",MB_OK|MB_ICONEXCLAMATION);
    	return 0;
    }
    

    Mein Frage: Was zum ... bedeutet der Fehler und was kann ich dagegen tun?

    mfg NightElb



  • http://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=9030

    EDIT:

    Im übrigen, wenn du erst anfängst die Sprache zu lernen, würde ich die empfehlen zuerst mit der Konsole zu arbeiten. Bringt nicht viel jetzt schon mit WinAPI sich rumzuschlagen..



  • Fang doch erstmal mit ISO C++ an, und nicht gleich WinAPI. Das ist der falsche Weg...



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • du kompilierst unicode



  • Ich kenn mich mit den Grundsätzen der Programmierung aus.

    Kann Java ganz gut und C eig auch, hab halt nur mit C++ jetzt angefangen.

    Also

    haterskater schrieb:

    du kompilierst unicode

    ??? sagt mir nicht viel (und ja ich weiß was Unicode und ASCII ist)



  • In den Projekteigenschaften in Visual Studio kannst du festlegen, welcher Zeichensatz verwendet werden soll. Für die meisten Funktionen der Win32 API gibt es jeweils eine ANSI (zB MessageBoxA( ) ) und eine UNICODE (zB MessageBoxW( ) ) Version. Der von Dir verwendete Bezeichner MessageBox ist ein #define auf eine der beiden, je nach dem, welchen Zeichensatz du in den Projekteigenschaften auswählst.

    In deinem Fall ist offensichtlich UNICODE ausgewählt. Somit erwartet MessageBox Wide-Character-Zeichenketten, bzw in WinAPI-Speak: einen LPCWSTR (Long Pointer to Constant Wide String). Somit:

    MessageBox( 0, L"Hallo Welt", L"Mein erstes Programm", MB_OK | MB_ICONEXCLAMATION );
    

    Will man ein Programm sowohl mit ANSI- als auch UNICODE-Zeichensatz kompilieren können, so bietet sich die Verwendung des Headers <tchar.h> an. Je nach Zeichensatz setzt das darin enthaltene Makro _T( x ) ein L vor die Zeichenkette x oder eben nicht:

    #include <tchar.h>
    
    // ...
    
    MessageBox( 0, _T( "Hallo Welt" ), _T( "Mein erstes Programm" ), MB_OK | MB_ICONEXCLAMATION );
    

    cheers, Swordfish



  • das nenne ich Hilfe

    Danke!


Anmelden zum Antworten