Problem mit der Erzeugung eines einfachen Programms



  • Hallo,

    Ich benutze Microsofts Visual C++ 2008 Express Edition. Nachdem ich jetzt schon viele Konsolenanwendungen geschrieben habe und mich mit den Grundlagen von C++ sowie der Objektorientierten Programmierung auseinandergesetzt habe, habe ich mir überlegt , auch mal Grafische Benutzeroberflächen mithilfe von WinAPI zu programmieren. Ich bin bei VC++ 2008 wie folgt vorgegangen:

    Datei -> Neu -> Projekt -> Win 32 ->Win32 Projekt (Nicht Win32 Konsolenprojekt)
    -> Habe einen Namen eingegeben -> Dann im Wizard auf 'Weiter'->'Leeres Projekt'
    ->'Fertigstellen'->Dann links ein rechtsklick auf Quelldateien->'Hinzufügen'->
    'Neues Element'->'C++-Datei (.cpp)'->Namen eingegeben: main (Ich habe auch WinMain als Name versucht).

    Dann habe ich dieser Quelldatei folgenden Inhalt gegeben (aus einem Tutorial):

    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hI, HINSTANCE, TCHAR*, int)
    {
     MessageBox(NULL, "Hallo", "", MB_OK);
     return 0;
    }
    

    Dann Speichern und dann kompilieren.

    1>------ Erstellen gestartet: Projekt: WinAPI, Konfiguration: Release Win32 ------
    1>Kompilieren...
    1>WinMain.cpp
    1>.\WinMain.cpp(4) : error C2731: 'WinMain': Überladen der Funktion nicht möglich
    1> .\WinMain.cpp(3): Siehe Deklaration von 'WinMain'
    1>.\WinMain.cpp(5) : error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [6]' in 'LPCWSTR' 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.

    Dies ist die Fehlermeldung.

    Ich bitte um Verständnis dafür, dass ich noch keinerlei Erfahrung in der Programmierung von GUI's habe.

    Also, kann mir jemand sagen, was ich tun muss um dieses Programm zum laufen zu bringen?

    Vielen Dank!



  • Beim Kompilieren mit dem Dev-C++ Compiler habe ich nicht dieses Problem, dort läuft es reibungslos.



  • zunächst würde ich in WinMain nicht nur die Typen, sondern auch Namen vergeben.
    Außerdem scheint dein Compiler auf Unicode gestellt zu sein, du musst das mit einem L vor dem String kenntlich machen:

    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hI, HINSTANCE hPrev, LPSTR command, int state)
    {
     MessageBox(NULL, L"Hallo", L"", MB_OK);
     return 0;
    }
    


  • Ok Vielen Dank es funktioniert jetzt!
    Dass ich nur Typen und keine Namen vergeben habe war für dieses Beispiel unerheblich doch verstehe ich, dass das wahrscheinlich in Folge der Programmierung von GUI's wichtig wird.

    Und wie kann ich Unicode ausstellen, bzw. was muss noch gemacht werden um den Vorgaben von Unicode zu entsprechen?



  • du kannst in den projekt eigenschaften unter dem karteireiter linker unicode an bzw austellen
    oder halt durch das L vor dem string das ganze kenntlich machen

    naja und die namen in dem funktionsnamen musst du dahin machen weil es sich um eine definition und nicht mehr um eine deklaration handelt


Log in to reply