Anwendung mit DLL schließt nicht richtig



  • Bin gerade dabei eine DLL zu schreiben, die in einem Fenster eine D3D Anwendung realisiert. Dazu hab ich nun ein kleines Starterprogramm geschrieben um das Ganze testen zu können.

    Mein Problem ist nun, das wenn das Programm beendet wird, das Fenster zwar geschlossen wird aber der Prozess noch im Task Manager bleibt.

    Da das komplette Programm aus DLL und Starter recht umfangreich ist, versuch ich mal nur die entscheidenden Stellen zu zeigen:

    Der Starter:

    Die Hauptschleife

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpsParams, int iCmd)
    {
    	g_App = new CApp(hInstance, iCmd);
    
    	g_App->MainLoop();
    
    	g_App->ShutDown();
    
    	delete g_App;
    	g_App = NULL;
    
    	return 0;
    }
    

    Die Applikationsklasse:

    class CApp
    {
    public:
    				CApp(HINSTANCE hInstance, int iCmd);	// Konstruktor
    				~CApp(void);								// Destruktor
    
    				// Ein Fenster erzeugen
    	bool		InitWindow(	WNDCLASSEX *wndStruct, HWND *hWnd, char sName[256], int iPosX,
    							int iPosY, int iSizeX, int iSizeY);	
    	void		MainLoop(void);		// Haupt-Programmschleife
    	void		ShutDown(void);		// Programm herunterfahren
    
    	// Inline-Methoden
    	inline void	SetStatus(bool bStatus) { m_bRunning = bStatus; }
    	inline bool	GetStatus(void)			{ return m_bRunning; }
    
    private:
    	CParameters	*m_pParams;			// Parameter-Objekt
    	CNoiseData	*m_pNoiseData;		// Messdaten-Objekt 
    	CEngine		*m_pEngine;			// Das Darstellungsobjekt
    
    	bool		m_bRunning;			// Zustand des Launchers (false -> Programm beenden)
    	int			m_iCmd;				// Windows-Parameterwert
    
    	HINSTANCE	m_hInstance;		// Handle der startenden Instanz
    	MSG			m_msgEvent;			// Nachrichten Objekt des Hauptfensters
    	HWND		m_hMainWnd;			// das Fenster Handle des Hauptfensters
    	WNDCLASSEX	m_wndMainProps;		// Struktur der Fenster-Eigenschaften (Hauptfenster)
    
    };	// ~class CApp;
    

    MainLoop:

    void CApp::MainLoop(void)
    {
    	CParameters	*m_pParams = new CParameters;			// Parameter-Objekt für die Anwendung
    	CNoiseData	*m_pNoiseData = new CNoiseData;	// Messdatenobjekt für die Anwendung
    
    	CEngine *m_pEngine = new CEngine(m_hInstance, m_hMainWnd, *m_pParams, *m_pNoiseData);
    	m_pEngine->MainLoop();
    
    	// Nachrichten Schleife, übersetzt und verteilt Windows Nachrichten
    	while (GetStatus() == true)		
    	{        
    		GetMessage(&m_msgEvent, NULL, 0, 0);
    		TranslateMessage(&m_msgEvent);        
    		DispatchMessage(&m_msgEvent);
    	}
    
    }	// ~CApp::MainLoop();
    

    Destruktor:

    void CApp::ShutDown(void)
    {
    	// Anwendung beenden
    
    	delete m_pParams;
    	m_pParams = NULL;
    
    	delete m_pNoiseData;
    	m_pNoiseData = NULL;
    
    	delete m_pEngine;
    	m_pEngine = NULL;
    
    	UnregisterClass("Starter", m_hInstance);
    
    }	// ~CApp::ShutDown();
    

    Bei Bedarf kann ich auch noch mehr reinstellen, ich denke es ist eher ein einfaches Grundlagenproblem, wo ich nen Denkfehler hab. Vielleicht sieht ja jemand den Fehler, hat ne Idee oder kann pauschal was zum Thema "Beenden der Anwendung" sagen.



  • Vermutlich läuft noch ein Thread oder Du "hängst" irgendwo. Debugge es doch einfach!


Anmelden zum Antworten