Ich finde den Fehler nicht



  • Hallo

    Ich bin daran ein Programm zu programmieren. Doch nun finde ich den Laufzeitfehler nicht. Wenn ich das Programm öffne und anschliessend wieder schliesse und dann kompiliere ich wieder, dann kommt der Fehler, Datei kann nicht zum Schreiben geöffnet werden. Also habe ich irgend etwas nicht korrekt beendet im Code.

    Hier ist der Code:

    // Cube3DEngine.h : Definiert die exportierten Funktionen für die DLL-Anwendung.
    //
    #include <windows.h>
    #include "Structures.h"
    
    #ifndef CUBE3DENGINE_HPP
    #define CUBE3DENGINE_HPP
    
    #define ME __declspec(dllexport)
    
    // Klasse erzeugen
    //
    class ME Cube3DEngine
    {
    public:
    
    	void SetWindowProperties (const int WindowWidth, const int WindowHeight);
    	void SetWindowColor (int R, int G, int B);
    	HWND OpenWindow (HINSTANCE hInstance);
    	static LRESULT WINAPI MsgProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
    
    private:
    
    	static int m_WindowWidth;
    	static int m_WindowHeight;
    	static int m_R;
    	static int m_G;
    	static int m_B;
    };
    
    #endif
    
    // Cube3DEngine.cpp
    //
    #include "Cube3DEngine.h"
    
    int Cube3DEngine::m_WindowHeight; // = 0
    int Cube3DEngine::m_WindowWidth;  // = 0
    int Cube3DEngine::m_R;			  // = 0
    int Cube3DEngine::m_G;			  // = 0
    int Cube3DEngine::m_B;			  // = 0
    
    void Cube3DEngine::SetWindowProperties(const int WindowWidth, const int WindowHeight)
    {
    	m_WindowWidth = WindowWidth;
    	m_WindowHeight = WindowHeight;
    }
    
    void Cube3DEngine::SetWindowColor(int R, int G, int B)
    {
    	m_R = R;
    	m_G = G;
    	m_B = B;
    }
    
    HWND Cube3DEngine::OpenWindow(HINSTANCE hInstance)
    {
    	WNDCLASSEX wc;
    
    	wc.style			= CS_HREDRAW | CS_VREDRAW;
    	wc.cbSize			= sizeof (wc);
    	wc.lpfnWndProc		= MsgProc;
    	wc.cbClsExtra		= 0;
    	wc.cbWndExtra		= 0;
    	wc.hInstance		= hInstance;
    	wc.hIcon			= LoadIcon (NULL, IDI_APPLICATION);
    	wc.hCursor			= LoadCursor (NULL, IDC_ARROW);
    	wc.hbrBackground	= (HBRUSH)CreateSolidBrush(RGB(m_R, m_G, m_B));
    	wc.lpszMenuName		= NULL;
    	wc.lpszClassName	= TEXT ("Cube3DEngine");
    	wc.hIconSm			= LoadIcon (NULL, IDI_APPLICATION);
    
    	if (RegisterClassEx (&wc) == 0) return 0;
    
    	return CreateWindowEx (NULL, TEXT("Cube3DEngine"), TEXT("Cube3DEngine"),
    						   WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    						   GetSystemMetrics(SM_CXSCREEN)/2 - 250,
    						   GetSystemMetrics(SM_CYSCREEN)/2 - 187,
    						   m_WindowWidth, m_WindowHeight, NULL,
    						   NULL, hInstance, NULL);
    }
    
    LRESULT WINAPI Cube3DEngine::MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	switch (msg)
    	{
    		// key was pressed
    		//
    	case WM_KEYDOWN:
    		{
    			switch (wParam)
    			{
    			case VK_ESCAPE:
    				{
    					PostMessage (hwnd, WM_CLOSE, 0, 0);
    					return 0;
    				} break;
    			default: break;
    			}
    		} break;
    
    	case WM_DESTROY:
    		{
    			PostQuitMessage (0);
    			return 0;
    		}
    	default: break;
    	}
    
    	return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    
    // main.h
    //
    #include <windows.h>
    #include <Cube3DEngine.h>
    #pragma comment(lib, "Cube3DEngine.lib")
    
    #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
    #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
    
    // Klasse erzeugen
    //
    class CApplication : public Cube3DEngine
    {
    public:
    
    	CApplication() {}
    	virtual ~CApplication() {}
    
    private:
    
    };
    
    // main.cpp
    //
    #include "main.h"
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    	MSG msg;
    	HWND hwnd;
    	bool bDone = false;
    	CApplication *pApp = new CApplication();
    
    	pApp->SetWindowProperties(1200, 1000);
    	hwnd = pApp->OpenWindow(hInstance);
    
    	while(!bDone)
    	{
    		while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    
    			if(KEY_DOWN(VK_ESCAPE))
    			{
    				PostMessage(hwnd, WM_DESTROY, 0, 0);
    			}
    		}
    	}
    
    	delete pApp;
    	return 0;
    }
    

    Kann mir jemand helfen?

    Danke

    Gruss Patrick



  • Huhu Eglifisch1,

    Datei kann nicht zum Schreiben geöffnet werden
    

    Hört sich für mich nach Visual Studio an.
    Geh auf

    Erstellen --> Projektmappe neu erstellen.

    Dann sollte der Fehler behoben sein, passiert mir auch manchmal.



  • Nein, leider geht es nicht. Denn wenn ich das Programm wieder starte und dann erneut kompiliere, kommt wieder die Meldung, die exe kann nicht num Schreiben geöffnet werden.



  • wer setzt denn bDone auf true, damit dein Programm auch aufhört zu laufen, nachdem die fenster alle weg sind?



  • Danke für die Hilfe. Das war wieder mal ein Fehler den ich selber hätte finden sollen.


Anmelden zum Antworten