JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=ab88fcda9b8915811ff765e2f2e8192cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

kapitel 12 linkerfehler
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 09:59    Titel: kapitel 12 linkerfehler Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 47
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 10:26    Titel: Antworten mit Zitat

Nunja, wenn ich es richtig sehe, fehlt die Funktion auch. Du hast nur den Funktionskopf angegeben aber nichts implementiert...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 11:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
City Hunter
Super JLI'ler


Alter: 38
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 11:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 11:42    Titel: Antworten mit Zitat

wo kann ich das denn einstellen? ich find bei google gerade nichts!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
City Hunter
Super JLI'ler


Alter: 38
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 11:59    Titel: Antworten mit Zitat

Sorry ich nutze Code::Block nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 12:06    Titel: Antworten mit Zitat

also, korrigier mal diese 2 fehler, dann müsste es klappen Razz :

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 12:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 13:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 14:30    Titel: Antworten mit Zitat

ich habe garkeine libs gelinkt, ich habe nur die pfade zu den include und lib verzeichnissen angegeben, wie im Buch beschrieben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 15:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 15:43    Titel: Antworten mit Zitat

das geht, aber ich will wissen was falsch war. welche libs muss ich denn linken?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 15:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 16:45    Titel: Antworten mit Zitat

wenn ich all die dateien linke, klappt das immernoch nicht
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 18.08.2007, 18:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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

Impressum