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

23.04.2011, 21:25

Scheitere schon am ersten Beispielprogramm

Hallo alle zusammen!
Ich versuche schon seit 2 Tagen das erste Beispielprogramm im Buch erfolgreich zu erstellen.
Nachdem ich einige Probleme durch andere Forumsbeiträge und Selbstinitiative gelöst habe stehe ich nun vor einem Problem, das ich nicht und nicht hinbekomme. :cursing:
Da die Suchfunktion nichts genaues ausgespuckt hat, bitte ich die erfahrenen Usern um Hilfe.

Beim kompilieren egal ob Debug- oder Release-Modus kommt immer folgende Fehlermeldung:

C-/C++-Quelltext

1
2
3
4
5
1>------ Erstellen gestartet: Projekt: Fenster, Konfiguration: Debug Win32 ------ 
1>Fenster.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""enum tbResult __cdecl ExitWindow(void)" (?ExitWindow@@YA?AW4tbResult@@XZ)" in Funktion "_WinMain@16". 
1>Fenster.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""enum tbResult __cdecl InitWindow(int,int,char *,struct HICON__ *)" (?InitWindow@@YA?AW4tbResult@@HHPADPAUHICON__@@@Z)" in Funktion "_WinMain@16". 
1>c:\users\michael\documents\visual studio 2010\Projects\jetzt\Debug\Fenster.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise. 
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


(Ich hab das Projekt sinnloserweise einfach "jetzt" genannt)

Bei den ersten 2 Errors finde ich einfach keine Lösung und beim 3. Error habe ich den Verdacht, dass er sich auf die ersten zwei Errors bezieht.


Meine Umgebung:
Windows 7, 64bit
Visual C++ 2010 Express
Microsoft DirectX SDK (June 2010)
Microsoft Platform SDK for Windows Server 2003 R2

Projekteigenschaften:

VC++-Verzeichnisse:
1)Bibliotheks-Verzeichnisse
…\
Microsoft Platform SDK for Windows Server 2003 R2\Lib
… \TriBase\Lib
… \Microsoft DirectX SDK (June 2010)\Lib\x64
… \Microsoft DirectX SDK (June 2010)\Lib\x86
$(VCInstallDir)lib
$(VCInstallDir)atlmfc\lib
$(WindowsSdkDir)lib
$(FrameworkSDKDir)\lib

2)Include-Verzeichnisse
…\TriBase\Include \DShowBaseClasses
…TriBase\Include
…\ Microsoft Platform SDK for Windows Server 2003 R2\Include
… \Microsoft DirectX SDK (June 2010)\Include
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
$(WindowsSdkDir)include
$(FrameworkSDKDir)\include

Linker:
1)Zusätzliche Abhängigkeiten
TriBase.lib bzw. TriBaseD.lib im Debug-Modus
und die von Visual C++ vorgegebenen Abhängigkeiten


Über Lösungsvorschläge und Anmerkungen würde ich mich sehr freuen.

MfG
c++Merler

2

23.04.2011, 21:31

Du bist sicher, dass du die triBase.h eingebunden hast? ;)

3

23.04.2011, 21:50


Nehme ich doch an:

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
// Kapitel 2 
// Beispielprogramm 01 
// =================== 
// Erstellen des Fensters und Aufrufen der Nachrichtenschleife. 
// Die dafür nötigen Funktionen sind in der Datei InitWindow.cpp 
// gespeichert. 
#include <Windows.h> 
#include <TriBase.h> 
#include "InitWindow.h" 
#include "Resource1.h" //Absichtlich umgeändert 
// ****************************************************************** 
// Render-FunktiontbResult Render(float fNumSecsPassed) 
{return TB_OK; 
} 
// ****************************************************************** 
// Move-FunktiontbResult Move(float fNumSecsPassed) 
{return TB_OK; 
} 
// ****************************************************************** 
// Windows-Hauptfunktionint WINAPI WinMain(HINSTANCE hInstance, 
HINSTANCE hPrevInstance, 
char* pcCmdLine,int iShowCmd) 
{// TriBase-Engine initialisieren 
tbInit(); 
// Fenster initialisierenInitWindow(640, 480, "Beispielprogramm Nr. 2: Fenster", 
LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1))); 
// Nachrichtenschleife 
tbDoMessageLoop(Render, Move); 
// Fenster herunterfahren 
ExitWindow(); 
// Engine herunterfahren 
tbExit();return 0; 
} 
// ******************************************************************

4

23.04.2011, 21:56

Achso Init- bzw. ExitWindow wird nicht gefunden. hatte wohl tbInit bzw.Exit gelesen
Hast du die InitWindow.cpp und hpp zum Projekt hinzugefügt?

5

23.04.2011, 21:58

sorry hab den code falsch kopiert. hier der richtige:

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
// Kapitel 2 
// Beispielprogramm 01 
// =================== 
// Erstellen des Fensters und Aufrufen der Nachrichtenschleife. 
// Die dafür nötigen Funktionen sind in der Datei InitWindow.cpp 
// gespeichert. 
#include <Windows.h> 
#include <TriBase.h> 
#include "InitWindow.h" 
#include "Resource1.h" //Absichtlich umgeändert 
// ****************************************************************** 
// 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) 
{// TriBase-Engine initialisieren 
tbInit(); 
// Fenster initialisieren 
InitWindow(640, 480, "Beispielprogramm Nr. 2: Fenster", 
LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1))); 
// Nachrichtenschleife 
tbDoMessageLoop(Render, Move); 
// Fenster herunterfahren 
ExitWindow(); 
// Engine herunterfahren 
tbExit();return 0; 
} 
// ******************************************************************

6

23.04.2011, 21:59

nein, das wirds sein. mal ausprobieren

7

23.04.2011, 22:00

Außer ein paar Zeilenumbrüchen sehe ich keinen Unterschied :D
Das behebt das Problem zwar nicht,aber sollte LoadIcon nicht vor InitWindow stehen?

8

23.04.2011, 22:03

kann sein, habs direkt aus dem Beispielordner der CD kopiert. Was meinst du mit hpp? InitWindow.cpp hab ich gefunden das andere aber nicht...

9

23.04.2011, 22:05

Meinte .h. Ich habe die damals in eine .hpp verändert. Wenn du es kopiert hast lass Load Icon malvorne stehen. Kann sein , dass ich mich irre

10

23.04.2011, 22:12

InitWindow.h habe ich bereits hinzugefügt. Als ich das LoadIcon vor dem initialisieren vorgestellt habe gabs eine Fehlermeldung.

Nachdem ich InitWindow eingefügt habe kam dann diese Fehlermeldung:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
1>------ Erstellen gestartet: Projekt: Fenster, Konfiguration: Debug Win32 ------ 
1> InitWindow.cpp 
1>c:\users\michael\documents\visual studio 2010\projects\jetzt\jetzt\initwindow.cpp(23): error C2440: 'Initialisierung': 'const char [16]' kann nicht in 'LPCWSTR' konvertiert werden 
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat. 
1>c:\users\michael\documents\visual studio 2010\projects\jetzt\jetzt\initwindow.cpp(50): error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [16]' in 'LPCWSTR' nicht möglich 
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat. 
1>c:\users\michael\documents\visual studio 2010\projects\jetzt\jetzt\initwindow.cpp(67): error C2664: 'UnregisterClassW': Konvertierung des Parameters 1 von 'const char [16]' in 'LPCWSTR' nicht möglich 
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat. 
1> Fenster.cpp 
1> Code wird generiert... 
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Werbeanzeige