Compiler fehler

NeXoN

Mitglied
ICh hab im internet ein Quellcode mit tut gefunden und wollt damit ein bisschen rumprobiern aber der Quellcode bringt beim Compilieren ein Fehler.
Der Fehler:
[Linker error] undefined reference to `GetStockObject@4
Der Compiler 'Dev-C++4.9.8.0'
Der Quellcode:
Code:
/*
 * Übung 1 zu Tutorial 2 "Ein eigenes Fenster"
 *
 * http://www.Loggy.de.st/
 *
 * Henno Buschmann (Loggy.mail@gmx.de)
 *
 * Aufgabe:
 *	Schreibe ein Programm, welches vor dem Beenden eine Nachricht mit Hilfe der
 *	MessageBox Funktion ausgibt. Die WinMain Funktion soll nicht geändert werden.
 */

#define STRICT

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

const char szAppName[]	= "Ein eigenes Fenster";

/* Funktion: WinMain
 *
 *		Einstiegspunkt eines Windows Programms. Erzeugt Fenster und ruft Nachrichten ab.
 * Parameter:
 *		HINSTANCE hInstance		: Programm ID; identifiziert die Programminstanz
 *		HINSTANCE hPrevInstance	: Ist in Win32 immer Null
 *		PSTR szCmdLine			: Commandozeilen Parameter, als C-String
 *		int iCmdShow			: Speichert, wie das eventuelle Fenster angezeigt werden soll
 * Rückgabe:
 *		int						: Null für keinen Fehler
 */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	MSG			msg;									/* Struktur speichert Nachrichten */
	HWND		hWnd;									/* Handle auf unser Hauptfenster */
	WNDCLASS	wc;	

	wc.style				= CS_HREDRAW | CS_VREDRAW;	/* Repaint bei Fenstergößenänderung */
	wc.lpfnWndProc			= WndProc;					/* Nachrichtenbearbeitungs Funktion */
	wc.cbClsExtra			= 0;
	wc.cbWndExtra			= 0;
	wc.hInstance			= hInstance;				/* Programm ID aus WinMain */
	wc.hCursor				= LoadCursor(NULL, IDC_ARROW);
	wc.hIcon				= LoadIcon(NULL, IDI_APPLICATION);
	wc.hbrBackground		= (HBRUSH) GetStockObject(WHITE_BRUSH);
	wc.lpszClassName		= szAppName;				/* Klassenname (bei uns = Programmname) */
	wc.lpszMenuName			= NULL;

	RegisterClass(&wc);

	hWnd = CreateWindow(	szAppName,					/* Fenster erstellen */
							szAppName,
							WS_OVERLAPPEDWINDOW,		/* Fensterstil */
							CW_USEDEFAULT,				/* X-Position */
							CW_USEDEFAULT,				/* Y-Position */
							CW_USEDEFAULT,				/* Breite */
							CW_USEDEFAULT,				/* Höhe */
							NULL,
							NULL,
							hInstance,					/* Programm ID */
							NULL);

	ShowWindow(hWnd, iCmdShow);							/* Fenster anzeigen */
	UpdateWindow(hWnd);									/* Und ein Repaint */

	while (GetMessage(&msg, NULL, 0, 0))				/* Nachrichten abrufen... */
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);							/* ... und bearbeiten */
	}

	return msg.wParam;									/* Rückgabewert nicht vergessen */
}

/*
 * Funktion WndProc
 *		Bearbeitet alle Nachrichten eines Fensters.
 * Parameter:
 *		HWND hWnd		: Handle für das Fenster
 *		UINT message	: Welche Nachricht? Als Konstanten aus windows.h
 *		WPARAM wParam	: Zusätzliche Informationen zu der Nachricht
 *		LPARAM lParam	: Zusätzliche Informationen zu der Nachricht
 */
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)									/* Welche Nachricht? */
	{
	case WM_DESTROY:									/* Fenster wird zerstört */
		{			/* Zeigt eine Nachricht */
			MessageBox(hWnd, "Das Programm wird beendet", szAppName, 
								MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
			PostQuitMessage(0);							/* dann Programm mit Null beenden */
			return 0;
		}
	}
	return DefWindowProc(hWnd, message, wParam, lParam);/* Bearbeitet alle restlichen Nachrichten */
}

Kann mir einer helfen

MFG NeXoN
 
Also ich kenn mich damit noch nicht so gut aus aber ich glaub nicht das ist alles was ich hab der Code oben

MFG NeXoN
 
Dann setzt doch mal testweise vorne in deine Datei folgende Zeile rein:
Code:
#pragma comment ( lib, "Gdi32.lib" )
Das sagt dem Linker, dass er die von Endurion erwähnte Lib dazulinken soll. Vielleicht hilft es.
 
Wird die lib denn auch wircklich dazugelinkt?
Ansonsten kann man die bei den Linkereinstellungen von Dev-C++ eintragen.

Gruß Homer

P.S.:
Bitte bevor man Windows-Fenster-Anwendungen in C++ schreiben möchte, sich mal mit Compiler und Linker beschäftigen. Vorallem auch mit der MSDN.
 
hi leute!
ich habe,ENDLICH, die loesung des problems gefunden(zumindest fuer den DEV++ compiler)
im prinzip ganz einfach:
werkzeuge/compiler optionen
einen haken bei: diese zeile zu linker kommandozeile hinzufuegen
in das kaestchen einfach eintragen: -lgdi32

ich hoffe ich konnte damit einigen leuten helfen :-)
 
Zurück