hInstance geht nicht



  • Ich habe hier 1-2 Fehler, die ich nicht nachvollziehen kann. Ich habe direkt aus dem Buch "C++ für Spieleprogrammierer" abgeschrieben - ich habe auch schon versucht, herauszufinden, ob der Autor auf seiner Website eine Korrektur oder dergleichen hat - vergebens.
    Könnt ihr mir helfen? Sorry wenn der Code so lang ist. Es geht um das einfache aufrufen eines Fensters...

    #include <windows.h>
    
    //Prototyp
    LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    	WNDCLASSEX	windowclass;
    	HWND		hWnd;
    	MSG			message;
    
    	const char szClassName[] = "Erstes Fenster";
    
    	windowclass.cbSize = sizeof (WNDCLASSEX);
    	windowclass.style = CS_HREDRAW | CS_VREDRAW;
    	windowclass.lpfnWndProc = WindowProc;
    	windowclass.cbClsExtra = 0;
    	windowclass.cbWndExtra = 0;
    	windowclass.hInstance = hInst;
    	windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    	windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    	windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);
    	windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;
    	windowclass.lpszMenuName = NULL;
    	windowclass.lpszClassName = szClassName;
    
    	if (!RegisterClassEx (&windowclass) )
    		return (0);
    
    	hWnd = CreateWindowEx (NULL, szClassName, "Erstes Fenster", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 250, NULL, NULL, hInst, NULL);
    
    	if (hWnd == NULL)
    		return (0);
    
    	while (GetMessage (&message, NULL, 0, 0) )
    	{
    		TranslateMessage (&message);
    		DispatchMessage (&message);
    	}
    
    	return (int)(message.wParam);
    }
    
    LRESULT CALLBACK WindowProc (HWND hWnd,UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch (message)
    	{
    	case WM_DESTROY:
    	{
    		PostQuitMessage (0);
    		return (0);
    	}
    	case WM_KEYDOWN:
    	{
    		switch (wParam)
    		{
    		case VK_ESCAPE:
    		{
    			PostQuitMessage (0);
    			return (0);
    		}
    		}
    	} break;
    	}
    
    	return (DefWindowProc (hWnd, message, wParam, lParam) );
    }
    

    Und? Würde mir jemand auch bei diesem unkommentierten Quelltext helfen?

    Oh, Sorry, die Fehlermeldungen nochmal:
    1>------ Erstellen gestartet: Projekt: test, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>test.cpp
    [...]\test\test.cpp(21) : error C2065: 'hInst': nichtdeklarierter Bezeichner
    [...]\test\test.cpp(27) : error C2440: '=': 'const char [15]' kann nicht in 'LPCWSTR' konvertiert werden
    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.
    [...]\test\test.cpp(32) : error C2065: 'hInst': nichtdeklarierter Bezeichner



  • schreib statt hInst hInstance, und wenn du nicht mit TCHAR Und TEXT() arbeitest, darfst du nicht UNICODE verwenden. Sprich:

    const TCHAR szClassName[] = TEXT("Erstes Fenster");
    


  • Da wo "hInst" steht, schreibe "hInstance" hin. So heißt nämlich auch der Parameter in "int WINAPI WinMain (HINSTANCE hInstance, ...".

    Und stell dein Projekt auf Multibyte um, dann brauchst du auch nicht das TEXT-Makro, wie @Melan es geschrieben hat.

    Project -> Properties -> Configuration Properties -> General -> Character Set ...



  • Vielen Dank!
    Ich habe auf "Multi Byte" umgestellt und hInst durch hInstance ersetzt - funktioniert. Was aber "Multi Byte" bedeutet und warum hInst nicht funktioniert, weiß ich nicht. Aber das kann ich mir sicherlich anlesen.
    Ich danke euch erstmal.
    Wenn weitere Fragen zu meinem ersten kleinen Windows-Progrämmchen auftauchen, melde ich mich hier.

    Tobi



  • tobi2886 schrieb:

    und warum hInst nicht funktioniert, weiß ich nicht.

    Weil der Bezeichner im Programm nicht bekannt ist. Woher soll er denn kommen? Wenn Du zB

    int WINAPI WinMain (HINSTANCE hInst, ...
    

    in die Main-Funktion schreibst, dann geht hInst, sonst eben nicht.



  • Nicht mal annähernd Grundlagen wissen, aber schon Fenster erstellen wollen 🙄


Anmelden zum Antworten