|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 18.08.2007, 08:59 Titel: kapitel 12 linkerfehler |
|
|
hallo,
ich hab mir vor kurzem Spieleprogrammierung mit DirectX aus der Bücherei ausgeliehen (nicht böse sein). Da ich C++ größsten Teils schon kann hab ich in Kapitel 12 angefangen.
Hier mein Code:
CPP: | #include<windows.h>
LRESULT CALLBACK MessageHandler(HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam);
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass = {
sizeof(WNDCLASSEX),
CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW,
MessageHandler,
0,
0,
hInstance,
LoadIcon(NULL, IDI_WINLOGO),
LoadCursor(NULL, IDC_ARROW),
(HBRUSH)GetStockObject(WHITE_BRUSH),
NULL,
"WindowsClass",
LoadIcon(NULL, IDI_WINLOGO)
};
RegisterClassEx(&wndClass);
return CreateWindowEx(
NULL,
"WindowsClass",
"Ein Fenster",
WS_OVERLAPPEDWINDOW |
WS_VISIBLE,
0,
0,
400,
300,
NULL,
NULL,
hInstance,
NULL);
}
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR nCmdLine,
int nCmdShow)
{
CreateMainWindow(hInstance);
}
|
Wenn ich jetzt versuche das zu kompilieren, bekomme ich folgende Fehlermeldung:
Code: |
-------------- Build: default in windowsstandard ---------------
Linking executable: windowsstandard.exe
1.obj : error LNK2019: unresolved external symbol _MessageHandler@16 referenced in function _CreateMainWindow
windowsstandard.exe : fatal error LNK1120: 1 unresolved externals
Process terminated with status 1 (0 minutes, 0 seconds)
2 errors, 0 warnings
|
ich denke mal ich hab irgendwelche compiler- oder linkereinstellungen falsch gemacht. Habt ihr vielleicht eine Idee? Ach ja, ich benutze die Software aus dem Buch, also Code::Blocks, Visual C++ Toolkit und Platform SDK.
Danke schonmal im vorraus. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.08.2007, 09:26 Titel: |
|
|
Nunja, wenn ich es richtig sehe, fehlt die Funktion auch. Du hast nur den Funktionskopf angegeben aber nichts implementiert... |
|
Nach oben |
|
|
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 18.08.2007, 10:32 Titel: |
|
|
ich hab den code mal fast so abgeschrieben wie er im Buch stand:
CPP: | include <windows.h>
HWND CreateMainWindow(HINSTANCE hInstance);
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
HWND hWnd = 0;
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR nCmdLine,
int nCmdShow)
{
hWnd = CreateMainWindow(hInstance);
if(0 == hWnd)
{
MessageBox(0, "Fenster konnte nicht erzeugt werden", "Fehler", MB_OK);
return 0;
}
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass = {
sizeof(WNDCLASSEX),
CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW,
MessageHandler,
0,
0,
hInstance,
LoadIcon(NULL, IDI_WINLOGO),
LoadCursor(NULL, IDC_ARROW),
(HBRUSH)GetStockObject(WHITE_BRUSH),
NULL,
"WindowsClass",
LoadIcon(NULL, IDI_WINLOGO)
};
RegisterClassEx(&wndClass);
return CreateWindowEx(
NULL,
"WindowsClass",
"Ein Fenster",
WS_OVERLAPPEDWINDOW |
WS_VISIBLE,
0,
0,
400,
300,
NULL,
NULL,
hInstance,
NULL);
}
LRESULT CALLBACK MessageHandler(HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
switch(&msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
|
Jetzt bekomme ich das hier:
Code: |
-------------- Build: default in windowsstandard ---------------
2.c
2.c(22) : error C2275: 'MSG' : illegal use of this type as an expression
F:\Programme\Microsoft Platform SDK\Include\WinUser.h(1581) : see declaration of 'MSG'
2.c(22) : error C2146: syntax error : missing ';' before identifier 'msg'
2.c(22) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
2.c(22) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
2.c(22) : error C2143: syntax error : missing ';' before 'identifier'
2.c(22) : error C2065: 'msg' : undeclared identifier
2.c(24) : warning C4133: 'function' : incompatible types - from 'int *' to 'LPMSG'
2.c(26) : warning C4133: 'function' : incompatible types - from 'int *' to 'const MSG *'
2.c(27) : warning C4133: 'function' : incompatible types - from 'int *' to 'const MSG *'
2.c(58) : warning C4047: 'function' : 'DWORD' differs in levels of indirection from 'void *'
2.c(80) : error C2050: switch expression not integral
Process terminated with status 1 (0 minutes, 0 seconds)
7 errors, 4 warnings
|
Was muss ich den ändern damit das klappt? |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 18.08.2007, 10:38 Titel: |
|
|
WEiß ja nicht ob Code::Block Unicode nutz wenn ja stell den mal ab, habe den bei mir abgestellt bei VS C++ und habe nur noch ein fehler da zustehen. |
|
Nach oben |
|
|
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 18.08.2007, 10:42 Titel: |
|
|
wo kann ich das denn einstellen? ich find bei google gerade nichts! |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 18.08.2007, 10:59 Titel: |
|
|
Sorry ich nutze Code::Block nicht. |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 18.08.2007, 11:06 Titel: |
|
|
also, korrigier mal diese 2 fehler, dann müsste es klappen :
1: CPP: | #include // nicht das # vergessen |
2: CPP: | switch(msg) // du musst nur die nachricht switchen, nicht dessen Addresse |
und btw: c++-tags benutzen, sind schöner als code tags und erlauben highlighting
Gruß DXer |
|
Nach oben |
|
|
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 18.08.2007, 11:18 Titel: |
|
|
ich hab das # nicht vergessen, ich habs nur irgendwie nicht mit kopiert.
ich hab das mit switch(msg) geändert, bekomme aber immer noch Fehler:
Code: |
-------------- Build: default in windowsstandard ---------------
cl : Command line warning D4025 : overriding '/MT' with '/ML'
2.c
2.c(22) : error C2275: 'MSG' : illegal use of this type as an expression
F:\Programme\Microsoft Platform SDK\Include\WinUser.h(1581) : see declaration of 'MSG'
2.c(22) : error C2146: syntax error : missing ';' before identifier 'msg'
2.c(22) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
2.c(22) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
2.c(22) : error C2143: syntax error : missing ';' before 'identifier'
2.c(22) : error C2065: 'msg' : undeclared identifier
2.c(24) : warning C4133: 'function' : incompatible types - from 'int *' to 'LPMSG'
2.c(26) : warning C4133: 'function' : incompatible types - from 'int *' to 'const MSG *'
2.c(27) : warning C4133: 'function' : incompatible types - from 'int *' to 'const MSG *'
2.c(58) : warning C4047: 'function' : 'DWORD' differs in levels of indirection from 'void *'
Process terminated with status 1 (0 minutes, 0 seconds)
6 errors, 4 warnings |
danke für all die schnellen antworten |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 18.08.2007, 12:14 Titel: |
|
|
hmm zeig mal die libs die du gelinkt hast, es könnte sein dass da eine fehlt. Der Meldung nach müsste der Fehler darin liegen, dass MSG nicht als Struktur sondern i-wie als int oder gar nicht definiert ist...
Gruß DXer |
|
Nach oben |
|
|
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 18.08.2007, 13:30 Titel: |
|
|
ich habe garkeine libs gelinkt, ich habe nur die pfade zu den include und lib verzeichnissen angegeben, wie im Buch beschrieben. |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 18.08.2007, 14:02 Titel: |
|
|
dann hast du wohl einen schritt übersprungen... versuch mal deinen Code in ein vorhandenes Beispielprojekt der CD einzufügen, dann sollte das z.B. gehen
Gruß DXer |
|
Nach oben |
|
|
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 18.08.2007, 14:43 Titel: |
|
|
das geht, aber ich will wissen was falsch war. welche libs muss ich denn linken? |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 18.08.2007, 14:50 Titel: |
|
|
wenn ich mich recht erinnere müssten das diese sein:- kernel32.lib
- user32.lib
- gdi32.lib
- winspool.lib
- comdlg32.lib
- advapi32.lib
- shell32.lib
- ole32.lib
- oleaut32.lib
- uuid.lib
Gruß DXer |
|
Nach oben |
|
|
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 18.08.2007, 15:45 Titel: |
|
|
wenn ich all die dateien linke, klappt das immernoch nicht |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 18.08.2007, 17:24 Titel: |
|
|
hmm, dann versuch mal die Datei nicht .c sondern .cpp zu nennen. Und wohin kommst du wenn du hier Zitat: | 2.c(22) : error C2275: 'MSG' : illegal use of this type as an expression
F:\Programme\Microsoft Platform SDK\Include\WinUser.h(1581) : see declaration of 'MSG' | auf "see declaration of..." klickst? Kopier diesen Abschnitt auch mal |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|