Window Class Registrierung zeigt Fehler an, schlägt aber nicht fehl



  • Hallo,

    Ich habe versucht, den Code und das Problem auf ein Minimum zu reduzieren. Wenn ich meine Fenster Klasse registriere, funktioniert das einwandfrei. GetLastError() zeigt aber trotzdem einen ERROR_FILE_NOT_FOUND Fehler an. Ist das ein übliches/korrektes Verhalten? Hier erstmal mein Code, vielleicht habe ich einen dummen Fehler gemacht.

    WNDCLASS windowClass;
    	ZeroMemory(&windowClass, sizeof (windowClass));
    	windowClass.lpszClassName  = TEXT("MyWindowClass");
    	windowClass.lpfnWndProc    = windowProc;
    	windowClass.hInstance      = hInstance;
    	windowClass.hCursor        = LoadCursor(0, IDC_ARROW);
    	windowClass.hIcon          = LoadIcon(0, IDI_APPLICATION);
    	windowClass.hbrBackground  = reinterpret_cast <HBRUSH> (COLOR_WINDOW + 1);
    	windowClass.lpszMenuName   = 0;
    	windowClass.style          = 0;
    	windowClass.cbClsExtra     = 0;
    	windowClass.cbWndExtra     = 0;
    
    	// OK
    	reportError(GetLastError());
    
    	ATOM classAtom = RegisterClass(&windowClass);
    
    	// File not found
    	reportError(GetLastError());
    
    	if (classAtom != 0)
    		reportError(0); // OK
    

    Ich erhalte zuerst eine Nachricht, dass alles ok ist, dann eine, dass das System die angegebene Datei nicht finden kann und schließlich wieder eine "Alles OK" - Nachricht. Die Klassenregistrierung schlägt also nicht fehl, trägt aber dennoch einen Fehlercode im System ein. Ich weiß jetzt nicht, ob ich einen Fehler gemacht habe oder, ob das Verhalten normal ist. Leider ist dieses Verhalten bei RegisterClass nicht dokumentiert.

    Was für mich dabei das Problem darstellt ist, dass diese Fehlernachricht anscheinend auch andere überdecken kann. Wenn ich die mir unsinnig erscheinende Class Style Kombination "CS_CLASSDC | CS_OWNDC" verwende, bekomme ich keinen "Invalid argument" Fehler, sondern die altbekannte "Das System kann die angegebene Datei nicht finden" - Nachricht.

    Ich habe hier im Forum zu diesem Thema nichts gefunden. Bei google habe ich einige Fälle entdeckt in denen dieser Fehler bei RegisterClass auftaucht. Er hatte aber in den Fällen, die ich mir angeschaut habe, immer einen anderen Grund (z.B. einen richtigen Fehler und nicht nur eine "Nachricht").

    Was meint ihr dazu?

    Gruß
    Don06



  • GetLastError() hat nur eine Bedeutung wenn RegisterClass 0 zurückliefert, ansonsten ist es undefiniert was da gerade steht.



  • Ok, danke.


Anmelden zum Antworten