Viele Fehler beim Linken

dav11kn

Mitglied
Hy Leute ,
Ich habe ein normales leeres Windows Fenster geschrieben. Als ich fertig war hab ich es erstellen lassen und was kam raus ?

Schaut mal

Code:
------ Build started: Project: Pacman, Configuration: Debug Win32 ------
Linking...
pacman.obj : error LNK2019: unresolved external symbol __imp__DefWindowProcW@16 referenced in function "long __stdcall programm_windowhandler(struct HWND__ *,unsigned int,unsigned int,long)" (?programm_windowhandler@@YGJPAUHWND__@@IIJ@Z)
pacman.obj : error LNK2019: unresolved external symbol __imp__PostQuitMessage@4 referenced in function "long __stdcall programm_windowhandler(struct HWND__ *,unsigned int,unsigned int,long)" (?programm_windowhandler@@YGJPAUHWND__@@IIJ@Z)
pacman.obj : error LNK2019: unresolved external symbol __imp__PostMessageW@16 referenced in function "long __stdcall programm_windowhandler(struct HWND__ *,unsigned int,unsigned int,long)" (?programm_windowhandler@@YGJPAUHWND__@@IIJ@Z)
pacman.obj : error LNK2019: unresolved external symbol __RTC_CheckEsp referenced in function "long __stdcall programm_windowhandler(struct HWND__ *,unsigned int,unsigned int,long)" (?programm_windowhandler@@YGJPAUHWND__@@IIJ@Z)
pacman.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
pacman.obj : error LNK2001: unresolved external symbol __RTC_InitBase
pacman.obj : error LNK2019: unresolved external symbol __imp__DispatchMessageW@4 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__TranslateMessage@4 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__TranslateAcceleratorW@12 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__GetMessageW@16 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__PeekMessageW@20 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__GetMenu@4 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__ShowWindow@8 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__MoveWindow@24 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__GetSystemMetrics@4 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__CreateWindowExW@48 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__LoadAcceleratorsW@8 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__RegisterClassExW@4 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__LoadCursorW@8 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol __imp__LoadIconW@8 referenced in function _WinMain@16
pacman.obj : error LNK2019: unresolved external symbol @_RTC_CheckStackVars@8 referenced in function _WinMain@16
LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
C:\Dokumente und Einstellungen\3D-V\Desktop\Projekte\Pacman\Pacman\Debug\Pacman.exe : fatal error LNK1120: 22 unresolved externals
Build log was saved at "file://c:\Dokumente und Einstellungen\3D-V\Desktop\Projekte\Pacman\Pacman\Pacman\Debug\BuildLog.htm"
Pacman - 23 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



____________________________________
Hier kommt noch das "Programm"

Code:
# include <stdio.h>
# include <windows.h>
# include "resource.h"

//Variablen
HINSTANCE meineInstanz;
HWND meinFenster;
HMENU meinMenu;



LRESULT CALLBACK programm_windowhandler (HWND hWnd , UINT msg , WPARAM wParam , LPARAM lParam)
{
	switch(msg)
	{
	case WM_COMMAND :
		switch (LOWORD (wParam))
		{
		case IDM_EXIT:
			PostMessage (hWnd , WM_CLOSE , 0 , 0);
			return 0;
		}
		break;
	case WM_DESTROY:
		PostQuitMessage (0);
		return 0;
	}
	return DefWindowProc (hWnd , msg , wParam , lParam);
}



int APIENTRY WinMain (HINSTANCE hInst , HINSTANCE hPrevInst , LPSTR pCmdLine , int nCmdShow)
{
	MSG msg;
	HACCEL acc;
	WNDCLASSEX wcx;

	//Die Struktur wcx(WNDCLASSEX) wird mit Informationen gefüllt.
	wcx.cbSize = sizeof (wcx);
	wcx.lpszClassName = TEXT ("Pacman");
	wcx.lpfnWndProc = programm_windowhandler;
	wcx.style = CS_VREDRAW | CS_HREDRAW;
	wcx.hInstance = hInst;
	wcx.hIcon = LoadIcon (hInst , MAKEINTRESOURCE (IDI_MAIN));
	wcx.hIconSm = LoadIcon (hInst , MAKEINTRESOURCE (IDI_MAIN));
	wcx.hCursor = LoadCursor (NULL , IDC_ARROW);
	wcx.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
	wcx.lpszMenuName = MAKEINTRESOURCE (IDR_MENU);
	wcx.cbClsExtra = 0;
	wcx.cbWndExtra = 0;

	if (!RegisterClassEx ( &wcx))
		return 0;

	acc = LoadAccelerators (hInst , MAKEINTRESOURCE (IDR_ACCEL));

	meinFenster = CreateWindowEx (0 , TEXT ("Pacman") ,
					TEXT ("Pacman") ,
					WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX ,
					CW_USEDEFAULT , CW_USEDEFAULT ,
					400 , 600 ,
					NULL , NULL , hInst , NULL);
	
	if (!meinFenster)
		return 0;

	MoveWindow (meinFenster ,
		(GetSystemMetrics (SM_CXSCREEN) - 400 ) /2,
		(GetSystemMetrics (SM_CYSCREEN) - 600 ) /2,
		400 , 600 , TRUE);

	ShowWindow (meinFenster , nCmdShow);

	meineInstanz = hInst;
	meinMenu = GetMenu (meinFenster);

	//Main Eventloop
	while (TRUE)
	{
		if (PeekMessage (&msg , NULL , 0 , 0 , PM_NOREMOVE))
		{
			if (GetMessage (&msg , NULL , 0 , 0) == 0)
				return 0; // Message ist WM_QUIT
			if (TranslateAccelerator (meinFenster , acc , &msg) == 0)
			{
				TranslateMessage (&msg);
				DispatchMessage (&msg);
			}
		}
		else
		{
			//Spiel
		}
	}
}

Was mache ich falsch ?
Ich hoffe ihr könnt mit diesen Informationen etwas anfangen und freue mich auf jede Antwort.

Noch was : Beim kompillieren gibt es keine Fehler
 
Zuletzt bearbeitet:
Die ganzen Windows Default-Libraries fehlen da noch:

user32.lib, kernel32.lib usw. Die findest du heraus, wenn du auf dem fehlenden External F1 drückst. Die MSDN listet bei jedem Win-API-Befehl ganz unten auf, welche Library die Funktion beherbergt.
 
Bei meinem Visual Studio 2003 sind die wohl durch die SubSystem/Windows-Einstellung (Linker->System) mit drin. Du kannst nachsehen, ob die bei (Linker->Command Line) mit aufgeführt sind:

/OUT:"Debug/HitBlock Deluxe.exe" /INCREMENTAL /NOLOGO /DEBUG /PDB:"Debug/HitBlock Deluxe.pdb" /SUBSYSTEM:WINDOWS kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "\SDK\Platform SDK 2003 R2\Lib\Kernel32.Lib" "\SDK\Platform SDK 2003 R2\Lib\User32.Lib" "\SDK\Platform SDK 2003 R2\Lib\Gdi32.Lib" "\SDK\Platform SDK 2003 R2\Lib\WinSpool.Lib" "\SDK\Platform SDK 2003 R2\Lib\ComDlg32.Lib" "\SDK\Platform SDK 2003 R2\Lib\AdvAPI32.Lib" "\SDK\Platform SDK 2003 R2\Lib\Shell32.Lib" "\SDK\Platform SDK 2003 R2\Lib\Ole32.Lib" "\SDK\Platform SDK 2003 R2\Lib\OleAut32.Lib" "\SDK\Platform SDK 2003 R2\Lib\Uuid.Lib" "\SDK\Platform SDK 2003 R2\Lib\odbc32.lib" "\SDK\Platform SDK 2003 R2\Lib\odbccp32.lib"

Falls nicht, kannst du versuchen, bei Additional Dependencies einzutragen. Allerdings sollte das über den "normalen" Weg laufen.

Welches VS hast du denn da? Hast du auch ein Win32-Projekt erstellt?
 
Also ich habe ein normales Win32 Projekt erstellt und habe VS 2005 pro.
Bei Command Line steht auch etwa das gleiche wie bei dir.
Könntest du vielleich alle diese Dateien aufschreiben die bei dir unter Linker/Input stehen , wäre sehr nett.

Danke
 
Das ist es ja, das mich wundert. Bei mir ist Linker->Input leer.

D.h. diese Libraries werden indirekt über die Projekt-Defaults eingebunden. Es hindert dich auch nichts, die explizit einzubinden. Nur wenn die bei dir in der Command Line auch drin sind, dann sollte das ja ausreichen.

Im schlimmsten Fall erstelle dir ein neues Projekt, kopiere deine Dateien rüber und kompilier nochmal. Das kommt wohl ab und an vor.
 
Zurück