Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.01.2010, 14:10

LNK2001: Nicht aufgelöstes externes Symbol

Hallo : )

Ich habe vor kurzem in das 3D Spieleprogrammierungsbuch mit DX9 und C++ von David Scherfgen reingelesen, da ich und ein Freund lernen wollen, mit C++ unter DX9 zu programmieren.

Da er das Buch jedoch nicht hat, wollen wir in purem Direct X programmieren, ohne die TriBase.
Nun hab ich die Datei InitWindow ein bisschen umgeschrieben, damit sie nicht auf die TriBase zugreift, damit er sie compilieren kann.
dabei kommt nun folgender Fehler:

Quellcode

1
1>MSVCRT.lib(crtexew.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_WinMain@16".


Der Code ist so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <Windows.h>
LRESULT WINAPI  WindowProc(HWND hWindow, unsigned int uiMessage, WPARAM WParam, LPARAM LParam);
HWND g_hWindow;


// ******************************************************************

// Funktion zum Initialisieren des Fensters

int InitWindow(int iWidth,
                    int iHeight,
                    char* pcName,
                    HICON hIcon)
{
    // Fensterklassenstruktur ausfüllen

    WNDCLASSEX WindowClass = {sizeof(WNDCLASSEX), CS_CLASSDC, WindowProc, 0, 0,
                              GetModuleHandle(NULL), hIcon, LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)), NULL,
                              NULL, "Direct3D window", NULL};

    // Klasse registrieren

    if(!RegisterClassEx(&WindowClass))
    {
        return 0;
    }


    RECT Rect;
    SetRect(&Rect, 0, 0, iWidth, iHeight);
    AdjustWindowRect(&Rect, WS_VISIBLE | WS_OVERLAPPEDWINDOW, FALSE);
    iWidth = Rect.right - Rect.left;
    iHeight = Rect.bottom - Rect.top;

    // Fenster erstellen und prüfen

    g_hWindow = CreateWindow("Direct3D window",
                             pcName,
                             WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                             GetSystemMetrics(SM_CXSCREEN) / 2 - iWidth / 2,
                             GetSystemMetrics(SM_CYSCREEN) / 2 - iHeight / 2,
                             iWidth,
                             iHeight,
                             NULL,
                             NULL,
                             GetModuleHandle(NULL),
                             NULL);
    if(g_hWindow == NULL)
    {
        return 0;
    }

    // Alles OK!


    return 1;
}

// ******************************************************************

// Funktion zum Herunterfahren der Fensterkomponente

int ExitWindow()
{
    // Klasse löschen

    UnregisterClass("Direct3D window", GetModuleHandle(NULL));


    return 1;
}

// ******************************************************************

// Die Nachrichtenfunktion des Fensters

LRESULT WINAPI WindowProc(HWND hWindow,
                          unsigned int uiMessage,
                          WPARAM WParam,
                          LPARAM LParam)
{
    PAINTSTRUCT Paint;

    switch(uiMessage)
    {
    case WM_CREATE:
        break;

    case WM_PAINT:
        // Das Fenster mit Schwarz füllen

        BeginPaint(hWindow, &Paint);
        FillRect(Paint.hdc, &Paint.rcPaint, (HBRUSH)(GetStockObject(BLACK_BRUSH)));
        EndPaint(hWindow, &Paint);
        break;

    case WM_CLOSE:
        DestroyWindow(hWindow);
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWindow, uiMessage, WParam, LParam);
    }

    return TRUE;
}


Ich habe schon einiges per Suchfunktion zu Linkerfehlern gefunden, doch leider haben sie mir bis jetzt noch nciht geholfen

Danke im voraus :)

MfG

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

08.01.2010, 14:15

Dir fehlt noch die WinMain.

Lerikson

Alter Hase

Beiträge: 412

Wohnort: nördlich von Hamburg

Beruf: Schüler

  • Private Nachricht senden

3

08.01.2010, 15:21

Zitat

Dir fehlt noch die WinMain.

also deine Hauptfunktion -> bei Konsolenprogrammen: int main()
bei Windowsprogrammen: WinMain()
Errare est humanum. -Windows ist menschlich ;-)

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

4

08.01.2010, 16:09

Ist zwar OT, aber ich wollte dich mal darauf hinweisen, dass diese Frage wohl eher in das "C, C++, C#, Delphi & Java" Forum gehört ;)
<< an dieser Stelle ist eine Signatur verstorben >>

Werbeanzeige