Fehlermeldungen bei Compilieren von einfachen Formular



  • Hallo!
    Ich habe versucht, mit Microsoft Visual Studio 2005 C++ ein einfaches Formular zu erstellen (aus einem Lehrbuch).
    Ich bekomme aber beim kompilieren immer Fehlermeldungen.
    Zuerst bekam ich eine, die ich aber unter
    Projekteigenschaften -> C/C++ -> Codegenerierung -> Laufzeitbibliothek -> Multithreaded-Debug-DLL (/MDd)
    ausschalten konnte.
    Nun erhalte ich folgende Fehlermeldungen:
    ------ Erstellen gestartet: Projekt: Formular, Konfiguration: Debug Win32 ------
    Kompilieren...
    cMain.cpp
    .\cMain.cpp(3) : error C2061: Syntaxfehler: Bezeichner 'UNIT'
    .\cMain.cpp(5) : error C2065: 'message': nichtdeklarierter Bezeichner
    .\cMain.cpp(5) : error C2050: Switch-Ausdruck ist keine Ganzzahl
    .\cMain.cpp(9) : error C3861: "PostQiutMessage": Bezeichner wurde nicht gefunden.
    .\cMain.cpp(14) : error C2065: 'wparam': nichtdeklarierter Bezeichner
    .\cMain.cpp(14) : error C2065: 'lparam': nichtdeklarierter Bezeichner
    .\cMain.cpp(25) : error C2440: '=': 'LRESULT (__stdcall *)(HWND)' kann nicht in 'WNDPROC' konvertiert werden
    Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    .\cMain.cpp(31) : error C3861: "GetStockOject": Bezeichner wurde nicht gefunden.
    .\cMain.cpp(40) : error C3861: "CreateWindowEX": Bezeichner wurde nicht gefunden.
    Das Buildprotokoll wurde unter "file://c:\Visual C++\Projects\Formular\Formular\Debug\BuildLog.htm" gespeichert.
    Formular - 9 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Hier der Code:

    #include <windows.h>
    
    LRESULT CALLBACK WindowProc(HWND hwnd, UNIT message, WPARAM wparam, LPARAM lparam)
    {
    	switch(message)
    	{
    		case WM_DESTROY:
    			{
    				PostQiutMessage(0);
    				break;
    			}
    		return 0;
    	}
    	return (DefWindowProc(hwnd, message, wparam, lparam));
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    	WNDCLASSEX winclass;
    
    	const char AppName[] = "myClass";
    
    	winclass.cbSize = sizeof(WNDCLASSEX);
    	winclass.style = CS_HREDRAW;
    	winclass.lpfnWndProc = WindowProc;
    	winclass.cbClsExtra = 0;
    	winclass.cbWndExtra = 0;
    	winclass.hInstance = hInstance;
    	winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	winclass.hbrBackground = (HBRUSH) GetStockOject(WHITE_BRUSH);
    	winclass.lpszMenuName = NULL;
    
    	winclass.lpszClassName = AppName;
    	winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    
    	if (!(RegisterClassEx(&winclass)))
    		return 0;
    
    	CreateWindowEX (NULL,
    		AppName,
    		"Mein Fenster",
    		WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    		0, 0,
    		400, 300,
    		NULL,
    		NULL,
    		hInstance,
    		NULL);
    
    	MSG message;
    
    	while (GetMessage(&message, NULL, 0, 0))
    	{
    		TranslateMessage(&message);
    		DispatchMessage(&message);
    	}
    
    	return 0;
    }
    

    Kann mir jemand sagen, wie man die Fehler verhindern kann, oder kann mir jemand einen anderen Quellcode senden, wo das erzeugen eines Formulars funktioniert?
    Danke



  • PinkoPalino schrieb:

    .\cMain.cpp(3) : error C2061: Syntaxfehler: Bezeichner 'UNIT'
    .\cMain.cpp(9) : error C3861: "PostQiutMessage": Bezeichner wurde nicht gefunden.
    .\cMain.cpp(31) : error C3861: "GetStockOject": Bezeichner wurde nicht gefunden.

    schlecht abgetippt würde ich meinen 😉
    - UINT
    - PostQuitMessage
    - GetStockObject
    die meisten anderen fehler sind eine folge davon...
    :xmas2:



  • ten schrieb:

    PinkoPalino schrieb:

    .\cMain.cpp(3) : error C2061: Syntaxfehler: Bezeichner 'UNIT'
    .\cMain.cpp(9) : error C3861: "PostQiutMessage": Bezeichner wurde nicht gefunden.
    .\cMain.cpp(31) : error C3861: "GetStockOject": Bezeichner wurde nicht gefunden.

    schlecht abgetippt würde ich meinen 😉
    - UINT
    - PostQuitMessage
    - GetStockObject
    die meisten anderen fehler sind eine folge davon...
    :xmas2:

    Ich weiß zwar nicht, was zu mit 'schlecht abgetippt' meinst, aber sein Problem ist schlicht und einfach eine nicht vorhandene oder fehlerhafte SDK-Einbindung.

    Guck Dir mal den Thread an, da wird beschrieben, wie man die Windows-Header korrekt einbindet 😉 .



  • CodeFinder schrieb:

    Ich weiß zwar nicht, was zu mit 'schlecht abgetippt' meinst...

    und ich wusste nicht, dass windows api-funktionen wie PostQiutMessage und GetStockOject hat. naja, hab' ich eben wieder was dazugelernt...



  • Oha, sorry 😃 , nit genau gelesen, jo klar hast Recht :xmas1:



  • Danke!
    Immer diese blöden Fehler. Jetzt funktionierts!
    PS:
    Ein weiterer kleiner Fehler is im obigen Quellcode:
    In Zeile 40 bei CreateWindowEx:
    Das x zum Schluss hatte ich groß geschrieben, kommt aber klein.

    Hier der neue Quelltext:

    #include <windows.h>
    
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
    {
    	switch(message)
    	{
    		case WM_DESTROY:
    			{
    				PostQuitMessage(0);
    				break;
    			}
    		return 0;
    	}
    	return (DefWindowProc(hwnd, message, wparam, lparam));
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    	WNDCLASSEX winclass;
    
    	const char AppName[] = "myClass";
    
    	winclass.cbSize = sizeof(WNDCLASSEX);
    	winclass.style = CS_HREDRAW;
    	winclass.lpfnWndProc = WindowProc;
    	winclass.cbClsExtra = 0;
    	winclass.cbWndExtra = 0;
    	winclass.hInstance = hInstance;
    	winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	winclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    	winclass.lpszMenuName = NULL;
    
    	winclass.lpszClassName = AppName;
    	winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    
    	if (!(RegisterClassEx(&winclass)))
    		return 0;
    
    	CreateWindowEx(NULL,
    		AppName,
    		"Mein Fenster",
    		WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    		0, 0,
    		400, 300,
    		NULL,
    		NULL,
    		hInstance,
    		NULL);
    
    	MSG message;
    
    	while (GetMessage(&message, NULL, 0, 0))
    	{
    		TranslateMessage(&message);
    		DispatchMessage(&message);
    	}
    
    	return 0;
    }
    

Anmelden zum Antworten