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

09.08.2009, 22:29

Linkererror 2019 bei Beispiel 2 "Direct3D Abzählungen&q

Guten Abend!

Ich lese zur Zeit dieses Buch (3. Auflage) und bekomme bei Beispiel 2 immer wieder den Linkererror 2019:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1>------ Erstellen gestartet: Projekt: DirectX, Konfiguration: Debug Win32 ------
1>Die Zwischen- und Ausgabedateien für das Projekt "DirectX" mit der Konfiguration "Debug|Win32" werden gelöscht.
1>Kompilieren...
1>D3DAbzählung.cpp
1>Direct3DEnum.cpp
1>InitDirect3D.cpp
1>InitWindow.cpp
1>Code wird generiert...
1>Verknüpfen...
1>Direct3DEnum.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Direct3DCreate9@4" in Funktion ""enum tbResult __cdecl GetDirect3DParameters(struct SDirect3DParameters *)" (?GetDirect3DParameters@@YA?AW4tbResult@@PAUSDirect3DParameters@@@Z)".
1>InitDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_Direct3DCreate9@4".
1>InitDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4" in Funktion ""enum tbResult __cdecl InitDirect3D(struct SDirect3DParameters *,struct HWND__ *)" (?InitDirect3D@@YA?AW4tbResult@@PAUSDirect3DParameters@@PAUHWND__@@@Z)".
1>InitDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_DXGetErrorDescription9A@4" in Funktion ""enum tbResult __cdecl InitDirect3D(struct SDirect3DParameters *,struct HWND__ *)" (?InitDirect3D@@YA?AW4tbResult@@PAUSDirect3DParameters@@PAUHWND__@@@Z)".
1>C:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\Visual Studio 2008\Projects\DirectX\Debug\DirectX.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\Visual Studio 2008\Projects\DirectX\DirectX\Debug\BuildLog.htm" gespeichert.
1>DirectX - 5 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========


Ich benutze Visual C++ Express Edition.
Das Platform SDK sowie das DirectX SDK habe ich installiert.


Unter Extras -> Optionen habe ich folgendes angegeben:

Includedateien:
C:\Programme\TriBase\Include
C:\Programme\Microsoft DirectX 9.0 SDK (October 2005)\Include
C:\Programme\Microsoft Platform SDK\Include

Bibliotheksdateien:
C:\Programme\TriBase\Lib
C:\Programme\Microsoft DirectX 9.0 SDK (October 2005)\Lib\x64
C:\Programme\Microsoft DirectX 9.0 SDK (October 2005)\Lib\x68
C:\Programme\Microsoft Platform SDK\Lib


In meinem Projekt habe ich folgende Dateien eingebunden:

Headerdateien:
Direct3DEnum.h
InitDirect3D.h
InitWindow.h
resource.h // gehört zu dem Beispiel

Quelldateien:
D3DAbzählung.cpp // gehört zu dem Beispiel
Direct3DEnum.cpp
InitDirect3D.cpp
InitWindow.cpp

Resourcendateien:
Icon1.ico


Unter "Zusätzliche Abhängigkeiten" habe ich folgende Libs angegeben:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
TriBaseD.LIB
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comctl32.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib


Obwohl ich die Dateien von der CD kopiert habe und somit alles richtig sein müsste, zeige ich hier noch mal den Quellcode:

D3DAbzählung.cpp

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
96
97
98
99
100
101
102
103
// Kapitel 2

// Beispielprogramm 02

// ===================

// Auflisten aller Direct3D-Optionen und anschließende Erstellung

// einer Geräteschnittstelle (IDirect3DDevice9).

// Zu den Optionen gehören unter anderem:

// - Adapter und Gerätetyp

// - Videomodi

// - Multi-Sampling-Typen und -Qualitätsstufen

// - Hardware- oder Softwareverarbeitung?


#include <Windows.h>
#include <TriBase.h>
#include "..\\..\\Allgemeines\\InitWindow.h"
#include "..\\..\\Allgemeines\\Direct3DEnum.h"
#include "..\\..\\Allgemeines\\InitDirect3D.h"
#include "Resource.h"

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

// Render-Funktion

tbResult Render(float fNumSecsPassed)
{
    return TB_OK;
}

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

// Move-Funktion

tbResult Move(float fNumSecsPassed)
{
    return TB_OK;
}

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

// Windows-Hauptfunktion

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCmdLine,
                   int iShowCmd)
{
    SDirect3DParameters Direct3DParameters;
    tbResult            Result;


    // TriBase-Engine initialisieren

    tbInit();

    // Direct3D-Optionen abfragen (vom Benutzer gewählt)

    Result = GetDirect3DParameters(&Direct3DParameters);
    if(Result == TB_ERROR)
    {
        // Es trat ein Fehler auf!

        MessageBox(NULL, "Fehler beim Abzählen!", "Fehler",
                   MB_OK | MB_ICONEXCLAMATION);
        tbExit();
        return 1;
    }
    else if(Result == TB_CANCELED)
    {
        // Der Dialog wurde abgebrochen!

        tbExit();
        return 0;
    }

    // Fenster initialisieren. Die Größe hängt vom gewählten

    // Videomodus ab, der in der Parameterstruktur gespeichert ist.

    if(InitWindow(Direct3DParameters.VideoMode.Width,
                  Direct3DParameters.VideoMode.Height,
                  "Beispielprogramm Nr. 2: Direct3D-Abzählung",
                  LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1))))
    {
        // Fehler beim Erstellen des Fensters!

        MessageBox(NULL, "Fehler beim Erstellen des Fensters!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        tbExit();
        return 1;
    }

    // Direct3D mit den abgefragten Einstellungen initialisieren

    if(InitDirect3D(&Direct3DParameters,
                    g_hWindow))
    {
        // Fehler!

        MessageBox(g_hWindow, "Fehler beim Initialisieren von Direct3D!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        ExitWindow();
        tbExit();
        return 1;
    }

    // Nachrichtenschleife

    tbDoMessageLoop(Render, Move);

    // Direct3D und Fenster herunterfahren

    ExitDirect3D();
    ExitWindow();

    // Engine herunterfahren

    tbExit();

    return 0;
}

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


resource.h

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//{{NO_DEPENDENCIES}}

// Microsoft Visual C++ generated include file.

// Used by D3DAbzählung.rc

//

#define IDI_ICON1                       101

// Next default values for new objects

// 

#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif


Beispiel 1 habe ich kompilieren können (dort geht es allerdings nur um die Initialisierung eines Windows sowie der TriBase Engine).

Vielen Dank im Voraus
Lasse

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

10.08.2009, 00:17

dir fehlt wohl noch die d3d9.lib

3

10.08.2009, 00:25

Vielen Dank!

Meine List sieht nun so aus (ich habe außerdem noch d3xerr9.LIB hinzugefügt)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tribased.lib
d3d9.lib
dxerr9.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comctl32.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib


Leider bekomme ich immer noch die selbe Fehlermeldung.
Was mach ich falsch?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

10.08.2009, 00:28

Bekommst du wirklich _die selbe_ Fehlermeldung? Wie sieht die jetzt aus? Wenns wirklich komplett die gleiche ist hast du wohl was wo falsch eingetragen...

5

10.08.2009, 00:36

Die Meldungen sind indentisch:

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
tribased.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comctl32.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib

1>------ Erstellen gestartet: Projekt: DirectX, Konfiguration: Debug Win32 ------
1>Die Zwischen- und Ausgabedateien für das Projekt "DirectX" mit der Konfiguration "Debug|Win32" werden gelöscht.
1>Kompilieren...
1>D3DAbzählung.cpp
1>Direct3DEnum.cpp
1>InitDirect3D.cpp
1>InitWindow.cpp
1>Code wird generiert...
1>Verknüpfen...
1>Direct3DEnum.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Direct3DCreate9@4" in Funktion ""enum tbResult __cdecl GetDirect3DParameters(struct SDirect3DParameters *)" (?GetDirect3DParameters@@YA?AW4tbResult@@PAUSDirect3DParameters@@@Z)".
1>InitDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_Direct3DCreate9@4".
1>InitDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4" in Funktion ""enum tbResult __cdecl InitDirect3D(struct SDirect3DParameters *,struct HWND__ *)" (?InitDirect3D@@YA?AW4tbResult@@PAUSDirect3DParameters@@PAUHWND__@@@Z)".
1>InitDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_DXGetErrorDescription9A@4" in Funktion ""enum tbResult __cdecl InitDirect3D(struct SDirect3DParameters *,struct HWND__ *)" (?InitDirect3D@@YA?AW4tbResult@@PAUSDirect3DParameters@@PAUHWND__@@@Z)".
1>C:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\Visual Studio 2008\Projects\DirectX\Debug\DirectX.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\Visual Studio 2008\Projects\DirectX\DirectX\Debug\BuildLog.htm" gespeichert.
1>DirectX - 5 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========


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
tribased.lib
d3d9.lib
dxerr9.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comctl32.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib 

1>------ Erstellen gestartet: Projekt: DirectX, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>D3DAbzählung.cpp
1>Direct3DEnum.cpp
1>InitDirect3D.cpp
1>InitWindow.cpp
1>Code wird generiert...
1>Verknüpfen...
1>Direct3DEnum.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Direct3DCreate9@4" in Funktion ""enum tbResult __cdecl GetDirect3DParameters(struct SDirect3DParameters *)" (?GetDirect3DParameters@@YA?AW4tbResult@@PAUSDirect3DParameters@@@Z)".
1>InitDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_Direct3DCreate9@4".
1>InitDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4" in Funktion ""enum tbResult __cdecl InitDirect3D(struct SDirect3DParameters *,struct HWND__ *)" (?InitDirect3D@@YA?AW4tbResult@@PAUSDirect3DParameters@@PAUHWND__@@@Z)".
1>InitDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_DXGetErrorDescription9A@4" in Funktion ""enum tbResult __cdecl InitDirect3D(struct SDirect3DParameters *,struct HWND__ *)" (?InitDirect3D@@YA?AW4tbResult@@PAUSDirect3DParameters@@PAUHWND__@@@Z)".
1>C:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\Visual Studio 2008\Projects\DirectX\Debug\DirectX.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\Visual Studio 2008\Projects\DirectX\DirectX\Debug\BuildLog.htm" gespeichert.
1>DirectX - 5 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Trag ich die Libs vielleicht falsch ein (Projekt -> Eigenschaften -> Linker -> Eingabe -> zusätzliche Abhängigkeiten)?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

10.08.2009, 00:50

Sehr komisch. Tragst du die libs vielleicht nur für die Release Konfiguration ein oder sowas!?

7

10.08.2009, 01:02

Auch nicht.
Ich bin ratlos...

8

10.08.2009, 01:06

Jetzt habe ich doch den Fehler gefunden:

Ich musste einfach bei den Bibliotheksdateien "C:\Programme\Microsoft DirectX 9.0 SDK (October 2005)\Lib\x64 " entfernen (ist ja noch x68 da)

Vielen Dank

Werbeanzeige