Wo liegt hier der fehler?



  • Hi alle zusammen

    Es ist so ich habe früher c++/cli programmiert bin jetzt noch dabei mir WinAPI an zu eignen.
    Jetzt meine frage kann mir bitte jemand sagen warum hier ein startup fehler vor liegt?
    [code]
    if(!RegisterClass (&wndclass)) //Hier liegt der fehler aber wo?
    {
    .....
    }

    MFG Basti



  • gib das & weg



  • Nee da sagt er mir immer noch das gleiche

    Zugriffsverletzung beim Lesen an Position 0xcccccccc


  • Administrator

    Zeig mal die Deklaration und Initialisierung von wndclass .

    Grüssli



  • Das ist der gesamte code.

    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
    	static TCHAR szAppName[] = TEXT("HelloWin");
    	HWND	hwnd;
    	MSG		msg;
    	WNDCLASS	wndclass;
    
    	wndclass.style			= CS_HREDRAW | CS_VREDRAW;
    	wndclass.lpfnWndProc	= WndProc;
    	wndclass.cbClsExtra		= 0;
    	wndclass.cbWndExtra		= 0;
    	wndclass.hInstance		= hInstance;
    	wndclass.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
    	wndclass.hCursor		= LoadCursor (NULL, IDC_ARROW);
    	wndclass.hbrBackground	= (HBRUSH) GetStockObject (WHITE_BRUSH);
    	wndclass.lpszMenuName	= NULL;
    	wndclass.lpszMenuName	= szAppName;
    
    	if(!RegisterClass (wndclass))
    	{
    		//UniCode- Compilierung ist die einzige realistische Fehlermöglichkeit
    		MessageBox(NULL, TEXT("Programm arbeit mit Unicode und setzt WindowsNT vorraus!"), szAppName, MB_ICONERROR);
    
    		return 0;
    	}
    
    	hwnd = CreateWindow (szAppName,								//Name der Fensterklasse
    				TEXT ("Das erste echte Programm"),				//Fenstertitel
    				WS_OVERLAPPEDWINDOW,							//Fensterstil
    				CW_USEDEFAULT,									//x-Position des Fensters
    				CW_USEDEFAULT,									//y-position des Fensters
    				CW_USEDEFAULT,									//Fensterbreite
    				CW_USEDEFAULT,									//Fensterhöhe
    				NULL,											//übergeordnetes Fenster
    				NULL,											//Menü
    				hInstance,										//Programm-Kopiezähler
    				NULL);											//zusätzliche Parameter
    
    	ShowWindow(hwnd, iCmdShow);
    	UpdateWindow(hwnd);
    
    	while(GetMessage (msg, NULL, 0,0))
    	{
    		TranslateMessage(msg);
    		DispatchMessage(msg);
    	}
    	return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	HDC			hdc;
    	PAINTSTRUCT	ps;
    	RECT		rect;
    
    	switch (message)
    	{
    
    	case WM_PAINT:
    		hdc = BeginPaint (hwnd, ps);
    
    		GetClientRect(hwnd, rect);
    
    		DrawText (hdc, TEXT("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    
    		EndPaint (hwnd, ps);
    		return 0;
    
    	case WM_DESTROY:
    		PostQuitMessage (0);
    		return 0;
    	}
    	return DefWindowProc(hwnd, message, wParam, lParam);
    }
    

    das & habe ich erstmal wieder eingebaut



  • In der letzten Zeile deiner Fensterklasse hast du zweimal die Zeile
    wndclass.lpszMenuName = szAppName;
    stattdessen muss es heißen
    wndclass.lpszClassName = szAppName;

    Wenn du schon das "berühmte" erste Windows-Programm von Petzold abkupferst, dann vermeide bitte Schreibfehler. 😃 😃

    Übrigens immer schön Referenzen(&) verwenden wo es das Beispiel tut, aber da wird dir dein Compiler sicher auf die Sprünge helfen. 😉



  • Ok danke.
    Den fehler habe ich wohl über lesen. Ich werde versuchen mich dran zu halten und schreibfehler zu vermeiden 🙄 😉 👍


Log in to reply