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

30.03.2009, 04:06

Linker Error (HWND)

Hallo,

nachdem ich bin entschlossen habe nur wegen der Verständnisfrage die InitWindow.h zu analysieren und selber nachzuschreiben bin ich auf folgenden Fehler gestoßen...

Hier erstmal mein Code:

Quellcode

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
#include <windows.h>
#include <TriBase.h>
//#include <WinDef.h> Nur zu Testzwecken - stand im MSDN

HWND g_hWindow;

tbResult InitWindow(int iWidht,int iHeight,char* pcName,HICON hicon)
{

    WNDCLASSEX WindowClass = {sizeof(WNDCLASSEX), CS_CLASSDC, WindowProc, 0, 0,
    GetModuleHandle(NULL), NULL, NULL, NULL, "test", NULL};


    if(!RegisterClassEx(&WindowClass))
    {
        TB_ERROR("Fensterklassenregistrierung fehlgeschlagen",TB_ERROR);

    }
    TB_INFO("Fensterklasse wurde registriert!");

    RECT Rect;

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

    g_hWindow = CreateWindow(
        "Direct 3D Window",
        pcName,
        WS_VISIBLE | WS_OVERLAPPEDWINDOW,
        GetSystemMetrics(SM_CXSCREEN) / 2 - iWidht /2,
        GetSystemMetrics(SM_CYSCREEN) / 2 - iHeight /2,
        iWidht,
        iHeight,
        NULL,
        NULL,
        GetModuleHandle(NULL),
        NULL);

    return TB_OK;
}



Fehler:

Quellcode

1
2
3
4
5
6
7
8
9
1>------ Erstellen gestartet: Projekt: TestTB3, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>MainCPP.cpp
1>Verknüpfen...
1>MainCPP.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)" in Funktion ""enum tbResult __cdecl InitWindow(int,int,char *,struct HICON__ *)" (?InitWindow@@YA?AW4tbResult@@HHPADPAUHICON__@@@Z)".
1>C:\Users\Woodfire\Documents\Visual Studio 2008\Projects\TestTB3\Debug\TestTB3.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://c:\Users\Woodfire\Documents\Visual Studio 2008\Projects\TestTB3\TestTB3\Debug\BuildLog.htm" gespeichert.
1>TestTB3 - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



Dieser Code findet sich u.a. in der Beispiel .h

Quellcode

1
2
3
4
5
6
7
8
9
10
11
#ifdef _INITWINDOW_CPP
#undef VAR
#define VAR
#else
#undef VAR
#define VAR extern


// ******************************************************************
// Variablen
VAR HWND g_hWindow;


Was macht denn dieser Code genau? Hab in meinen Büchern die Präprozessor Kapitel leider übersprungen^^.

Er scheint jedoch elementar wichtig zu sein.



Hoffe mir kann jemand helfen, ich will nämlich den Code komplett verstehen und nicht irgendwelche Scheinlösungen im Netz suchen, die den Fehler bloß umgehen anstatt ihn zu beheben =(.

Vielen Dank schonmal.

Mfg Woodfire.

3

30.03.2009, 11:34

: O Dachte ich kann die Funktionsdeklerationen weglassen und dann überseh ich sowas wichtiges.

Vielen Dank!

Werbeanzeige