<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Anwendung mit DLL schließt nicht richtig]]></title><description><![CDATA[<p>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.</p>
<p>Mein Problem ist nun, das wenn das Programm beendet wird, das Fenster zwar geschlossen wird aber der Prozess noch im Task Manager bleibt.</p>
<p>Da das komplette Programm aus DLL und Starter recht umfangreich ist, versuch ich mal nur die entscheidenden Stellen zu zeigen:</p>
<p><strong>Der Starter:</strong></p>
<p><em>Die Hauptschleife</em></p>
<pre><code class="language-cpp">int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpsParams, int iCmd)
{
	g_App = new CApp(hInstance, iCmd);

	g_App-&gt;MainLoop();

	g_App-&gt;ShutDown();

	delete g_App;
	g_App = NULL;

	return 0;
}
</code></pre>
<p><em>Die Applikationsklasse:</em></p>
<pre><code class="language-cpp">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 -&gt; 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;
</code></pre>
<p><em>MainLoop:</em></p>
<pre><code class="language-cpp">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-&gt;MainLoop();

	// Nachrichten Schleife, übersetzt und verteilt Windows Nachrichten
	while (GetStatus() == true)		
	{        
		GetMessage(&amp;m_msgEvent, NULL, 0, 0);
		TranslateMessage(&amp;m_msgEvent);        
		DispatchMessage(&amp;m_msgEvent);
	}

}	// ~CApp::MainLoop();
</code></pre>
<p><em>Destruktor:</em></p>
<pre><code class="language-cpp">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(&quot;Starter&quot;, m_hInstance);

}	// ~CApp::ShutDown();
</code></pre>
<p>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 &quot;Beenden der Anwendung&quot; sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176279/anwendung-mit-dll-schließt-nicht-richtig</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 00:37:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176279.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 Mar 2007 16:13:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anwendung mit DLL schließt nicht richtig on Mon, 19 Mar 2007 16:13:55 GMT]]></title><description><![CDATA[<p>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.</p>
<p>Mein Problem ist nun, das wenn das Programm beendet wird, das Fenster zwar geschlossen wird aber der Prozess noch im Task Manager bleibt.</p>
<p>Da das komplette Programm aus DLL und Starter recht umfangreich ist, versuch ich mal nur die entscheidenden Stellen zu zeigen:</p>
<p><strong>Der Starter:</strong></p>
<p><em>Die Hauptschleife</em></p>
<pre><code class="language-cpp">int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpsParams, int iCmd)
{
	g_App = new CApp(hInstance, iCmd);

	g_App-&gt;MainLoop();

	g_App-&gt;ShutDown();

	delete g_App;
	g_App = NULL;

	return 0;
}
</code></pre>
<p><em>Die Applikationsklasse:</em></p>
<pre><code class="language-cpp">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 -&gt; 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;
</code></pre>
<p><em>MainLoop:</em></p>
<pre><code class="language-cpp">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-&gt;MainLoop();

	// Nachrichten Schleife, übersetzt und verteilt Windows Nachrichten
	while (GetStatus() == true)		
	{        
		GetMessage(&amp;m_msgEvent, NULL, 0, 0);
		TranslateMessage(&amp;m_msgEvent);        
		DispatchMessage(&amp;m_msgEvent);
	}

}	// ~CApp::MainLoop();
</code></pre>
<p><em>Destruktor:</em></p>
<pre><code class="language-cpp">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(&quot;Starter&quot;, m_hInstance);

}	// ~CApp::ShutDown();
</code></pre>
<p>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 &quot;Beenden der Anwendung&quot; sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248541</guid><dc:creator><![CDATA[kokunze]]></dc:creator><pubDate>Mon, 19 Mar 2007 16:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to Anwendung mit DLL schließt nicht richtig on Mon, 19 Mar 2007 17:00:37 GMT]]></title><description><![CDATA[<p>Vermutlich läuft noch ein Thread oder Du &quot;hängst&quot; irgendwo. Debugge es doch einfach!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248575</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Mon, 19 Mar 2007 17:00:37 GMT</pubDate></item></channel></rss>