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