<?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[WinAPI in mehreren Dateien]]></title><description><![CDATA[<p>Hallo Leute</p>
<p>ich habe ein komisches Problem mit der WinAPI unter Visual C++ 2008 Express Edition.</p>
<p>Und zwar wage ich mich zu Zeit an Spieleprogrammierung und habe mir dafür eineBook besorgt (&quot;3D-Spiele mit C++ und DirectX in 21 Tagen&quot;)</p>
<p>naja, ich poste eifnach mal die Teile des Quellcodes vond enen ich denke, dass sie den/die Fehler beinhalten.</p>
<p>Main Datei:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;WinMain_1.h&quot;
#include &quot;GameRoutines.h&quot;

int WINAPI WinMain(HINSTANCE hinstance,
				   HINSTANCE hprevinstance,
				   LPSTR lpcmdline,
				   int ncmdshow)
{
	WNDCLASSEX winclass;
	HWND hwnd;
	MSG msg;
	// Fenstereigenschaften festlegen:
	winclass.cbSize = sizeof(WNDCLASSEX);
	winclass.style = CS_HREDRAW | CS_VREDRAW;
	winclass.lpfnWndProc = WindowProc;
	winclass.cbClsExtra = 0;
	winclass.cbWndExtra = 0;
	winclass.hInstance = hinstance;
	winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
	winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	winclass.lpszMenuName = NULL;
	winclass.lpszClassName = WINDOW_CLASS_NAME;
	winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

        hinstance_app = hinstance;

	if(!RegisterClassEx(&amp;winclass))
		return(0);

	InitResolution();
	hwnd = CreateWindowEx(NULL, 
						  WINDOW_CLASS_NAME,
						  &quot;My Game Shell&quot;,
						  WS_OVERLAPPEDWINDOW | WS_VISIBLE,
						  0, 0,
						  800, 600, 
						  NULL, NULL,
						  hinstance, NULL);
	if ( !(hwnd) )
			return(0);

	main_window_handle = hwnd;
	Game_Init();
	while(TRUE) // Nachrichtenweiterleitung
	{
		if (PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))
		{
			if(msg.message == WM_QUIT)
				break;
			TranslateMessage(&amp;msg);
			DispatchMessage(&amp;msg);
		}
		Game_Main();
	}
	Game_Shutdown();
	return(msg.wParam);
}

LRESULT WindowProc ... blablabla
</code></pre>
<p>WinMain_1.h</p>
<pre><code class="language-cpp">#ifndef WinMain_1
#define WinMain_1

/////////////////////////////////////////////////////////////////
// Globale Variablen
/////////////////////////////////////////////////////////////////
HWND main_window_handle = NULL;
HINSTANCE hinstance_app = NULL;
/////////////////////////////////////////////////////////////////
// Funktions prototypen
/////////////////////////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd, 
							UINT msg, 
							WPARAM wparam, 
							LPARAM lparam);

#endif
</code></pre>
<p>Datei die auf 'main_window_handle' zugreift:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;GameRoutines.h&quot;

void Game_Main(void)
{
	// Mit ESC kann die Anwendung verlassen werden
	if(KEYDOWN(VK_ESCAPE))
		SendMessage(main_window_handle,WM_CLOSE,0,0);

	GameMainRoutine();
}
</code></pre>
<p>natürlich gehört da auch en header datei mit den deklarationen zu und die datei sit noch um einiges grösser, aber da wird nie auf ein handle oder ähnliches zugegriffen...</p>
<p>so der compiler spuckt folgende fehlermeldungen aus:</p>
<p>WinMain_1.obj : error LNK2005: &quot;struct HWND__ * main_window_handle&quot; (?main_window_handle@@3PAUHWND__@@A) ist bereits in GameRoutines.obj definiert.<br />
WinMain_1.obj : error LNK2005: &quot;struct HINSTANCE__ * hinstance_app&quot; (?hinstance_app@@3PAUHINSTANCE__@@A) ist bereits in GameRoutines.obj definiert.<br />
E:\SchuLe\C++\2008\DirectX\Debug\DirectX.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.</p>
<p>wo liegt mein fehler???</p>
<p>mfg Skym0sh0</p>
<p>PS: entschuldigt alle meine Rechtschreibfehler und werft mir nicht so Worte wie dumemr noob oder so an den Kopf...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208775/winapi-in-mehreren-dateien</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 21:02:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208775.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Mar 2008 15:56:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to WinAPI in mehreren Dateien on Sat, 22 Mar 2008 15:56:00 GMT]]></title><description><![CDATA[<p>Hallo Leute</p>
<p>ich habe ein komisches Problem mit der WinAPI unter Visual C++ 2008 Express Edition.</p>
<p>Und zwar wage ich mich zu Zeit an Spieleprogrammierung und habe mir dafür eineBook besorgt (&quot;3D-Spiele mit C++ und DirectX in 21 Tagen&quot;)</p>
<p>naja, ich poste eifnach mal die Teile des Quellcodes vond enen ich denke, dass sie den/die Fehler beinhalten.</p>
<p>Main Datei:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;WinMain_1.h&quot;
#include &quot;GameRoutines.h&quot;

int WINAPI WinMain(HINSTANCE hinstance,
				   HINSTANCE hprevinstance,
				   LPSTR lpcmdline,
				   int ncmdshow)
{
	WNDCLASSEX winclass;
	HWND hwnd;
	MSG msg;
	// Fenstereigenschaften festlegen:
	winclass.cbSize = sizeof(WNDCLASSEX);
	winclass.style = CS_HREDRAW | CS_VREDRAW;
	winclass.lpfnWndProc = WindowProc;
	winclass.cbClsExtra = 0;
	winclass.cbWndExtra = 0;
	winclass.hInstance = hinstance;
	winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
	winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	winclass.lpszMenuName = NULL;
	winclass.lpszClassName = WINDOW_CLASS_NAME;
	winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

        hinstance_app = hinstance;

	if(!RegisterClassEx(&amp;winclass))
		return(0);

	InitResolution();
	hwnd = CreateWindowEx(NULL, 
						  WINDOW_CLASS_NAME,
						  &quot;My Game Shell&quot;,
						  WS_OVERLAPPEDWINDOW | WS_VISIBLE,
						  0, 0,
						  800, 600, 
						  NULL, NULL,
						  hinstance, NULL);
	if ( !(hwnd) )
			return(0);

	main_window_handle = hwnd;
	Game_Init();
	while(TRUE) // Nachrichtenweiterleitung
	{
		if (PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))
		{
			if(msg.message == WM_QUIT)
				break;
			TranslateMessage(&amp;msg);
			DispatchMessage(&amp;msg);
		}
		Game_Main();
	}
	Game_Shutdown();
	return(msg.wParam);
}

LRESULT WindowProc ... blablabla
</code></pre>
<p>WinMain_1.h</p>
<pre><code class="language-cpp">#ifndef WinMain_1
#define WinMain_1

/////////////////////////////////////////////////////////////////
// Globale Variablen
/////////////////////////////////////////////////////////////////
HWND main_window_handle = NULL;
HINSTANCE hinstance_app = NULL;
/////////////////////////////////////////////////////////////////
// Funktions prototypen
/////////////////////////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd, 
							UINT msg, 
							WPARAM wparam, 
							LPARAM lparam);

#endif
</code></pre>
<p>Datei die auf 'main_window_handle' zugreift:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;GameRoutines.h&quot;

void Game_Main(void)
{
	// Mit ESC kann die Anwendung verlassen werden
	if(KEYDOWN(VK_ESCAPE))
		SendMessage(main_window_handle,WM_CLOSE,0,0);

	GameMainRoutine();
}
</code></pre>
<p>natürlich gehört da auch en header datei mit den deklarationen zu und die datei sit noch um einiges grösser, aber da wird nie auf ein handle oder ähnliches zugegriffen...</p>
<p>so der compiler spuckt folgende fehlermeldungen aus:</p>
<p>WinMain_1.obj : error LNK2005: &quot;struct HWND__ * main_window_handle&quot; (?main_window_handle@@3PAUHWND__@@A) ist bereits in GameRoutines.obj definiert.<br />
WinMain_1.obj : error LNK2005: &quot;struct HINSTANCE__ * hinstance_app&quot; (?hinstance_app@@3PAUHINSTANCE__@@A) ist bereits in GameRoutines.obj definiert.<br />
E:\SchuLe\C++\2008\DirectX\Debug\DirectX.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.</p>
<p>wo liegt mein fehler???</p>
<p>mfg Skym0sh0</p>
<p>PS: entschuldigt alle meine Rechtschreibfehler und werft mir nicht so Worte wie dumemr noob oder so an den Kopf...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478788</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 22 Mar 2008 15:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to WinAPI in mehreren Dateien on Sat, 22 Mar 2008 15:59:11 GMT]]></title><description><![CDATA[<blockquote>
<p>WinMain_1.obj : error LNK2005: &quot;struct HWND__ * main_window_handle&quot; (?main_window_handle@@3PAUHWND__@@A) ist bereits in GameRoutines.obj definiert.<br />
WinMain_1.obj : error LNK2005: &quot;struct HINSTANCE__ * hinstance_app&quot; (?hinstance_app@@3PAUHINSTANCE__@@A) ist bereits in GameRoutines.obj definiert.<br />
E:\SchuLe\C++\2008\DirectX\Debug\DirectX.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.</p>
</blockquote>
<p>Steht eigentlich alles schon da,</p>
<p>die beiden Handle:</p>
<pre><code class="language-cpp">main_window_handle
hinstance_app
</code></pre>
<pre><code class="language-cpp">#ifndef WinMain_1
#define WinMain_1

/////////////////////////////////////////////////////////////////
// Globale Variablen
/////////////////////////////////////////////////////////////////
HWND mein_main_window_handle = NULL; // so z.B.
HINSTANCE mein_hinstance_app_handle = NULL; // so z.B.
/////////////////////////////////////////////////////////////////
// Funktions prototypen
/////////////////////////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd,
                            UINT msg,
                            WPARAM wparam,
                            LPARAM lparam);

#endif
</code></pre>
<p>gibt es so schon, wenn du denen also andere Namen gibst, sollte<br />
es gehen. Musst die Namen dann natürlich überall im Quellcode ändern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478790</guid><dc:creator><![CDATA[blub* 0]]></dc:creator><pubDate>Sat, 22 Mar 2008 15:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to WinAPI in mehreren Dateien on Sat, 22 Mar 2008 16:04:20 GMT]]></title><description><![CDATA[<p>wo soll es die denn geben???</p>
<p>in der winmain_1.h steht nur HWND main_window_handle und das andere handle</p>
<p>und ansonsten wird nur einmal main_window_hande mit (dem standart-)hwnd belegt und hinstance_app mit hinstance...</p>
<p>und main_window_handle wird einmal an eine funktion übergeben</p>
<p>das wars, wo soll da etwas doppelt sein???</p>
<p>aber egal ich versuchs mit anderen namen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478793</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 22 Mar 2008 16:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to WinAPI in mehreren Dateien on Sat, 22 Mar 2008 16:06:34 GMT]]></title><description><![CDATA[<p>nein klappt nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478796</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 22 Mar 2008 16:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to WinAPI in mehreren Dateien on Sat, 22 Mar 2008 16:23:31 GMT]]></title><description><![CDATA[<p>so jetzt erstmal eine grundlegende frage</p>
<p>darf ich variablen überhaupt in headerdateien deklarieren???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478804</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 22 Mar 2008 16:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to WinAPI in mehreren Dateien on Sat, 22 Mar 2008 17:22:52 GMT]]></title><description><![CDATA[<p>Ja.</p>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478839</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sat, 22 Mar 2008 17:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to WinAPI in mehreren Dateien on Sat, 22 Mar 2008 17:27:42 GMT]]></title><description><![CDATA[<p>tolle antwort xDDD</p>
<p>nein aber hat sich erledigt<br />
ich musste nur 'extern' in der header datei vor die variablen setzen dann hats funktioniert</p>
<p>naja danke leute</p>
<p>kann geclosed werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478842</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 22 Mar 2008 17:27:42 GMT</pubDate></item><item><title><![CDATA[Reply to WinAPI in mehreren Dateien on Sun, 23 Mar 2008 18:55:22 GMT]]></title><description><![CDATA[<p>Stimmt, für mich hängen Headerdateien und Klassen<br />
irgendwie fest zusammen und da brauchste nunmal<br />
das extern nicht *g*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479286</guid><dc:creator><![CDATA[blub* 0]]></dc:creator><pubDate>Sun, 23 Mar 2008 18:55:22 GMT</pubDate></item></channel></rss>