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

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

1

22.01.2006, 16:59

Lösung: TriBase und Visual C++ 2005/2008 Express

Aktualisierte Projekte, die mit Visual C++ 2010 und dem neusten DirectX-SDK funktionieren - siehe hier:

Software-Update: Alle Projekte aus dem Buch "3D-Spieleprogrammierung" für Visual C++ 2010 & neues DirectX-SDK






































-------------------------------------------------------
(ALTER BEITRAG - NICHT WICHTIG!)



Hallo,

wie Ihr ja wisst, gibt es Probleme, die Engine und die anderen Projekte mit Visual C++ 2005 Express zu kompilieren.

Nach einem halben Tag Arbeit habe ich es jetzt geschafft, alles ans Laufen zu kriegen. Es gibt keinerlei Probleme mehr.

------------------------------

1. Zu allererst benötigt Ihr das Platform-SDK:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ (Weiterleitung)

Installiert es. Es werden nicht alle Komponenten benötigt. Am wichtigsten sind die Core- und die DirectShow-Komponente. Die Dokumentation kann natürlich auch nicht schaden, das Herunterladen dauert aber lange.

Wenn das Platform-SDK installiert ist, müsst Ihr folgende Verzeichnisse in Visual C++ 2005 Express eintragen (ich gehe hier davon aus, dass das Platform-SDK nach "C:\Dev\Platform SDK" installiert wurde):
- (Include): C:\Dev\Platform SDK\Include
- (Include): C:\Dev\Platform SDK\Include\MFC (für afxres.h)
- (Library): C:\Dev\Platform SDK\Lib

Natürlich müssen auch die folgenden Pfade angegeben werden:
- (Include): C:\Dev\Buch\TriBase\Include
- (Library): C:\Dev\Buch\TriBase\Lib
- (Include): C:\Dev\DirectX SDK\Include
- (Library): C:\Dev\DirectX SDK\Lib(\X86) - je nach SDK-Version

------------------------------

2. Nun sollten alle schon vorhandenen Binärdaten im TriBase-Ordner gelöscht werden. Das sind die LIB-Dateien, die DLLs und die EXEs. Aber eine LIB muss erhalten bleiben, nämlich die "StrmIIDs.lib".

------------------------------

3. Jetzt solltet Ihr versuchen, die DirectShow-Base-Classes neu zu kompilieren (werden von der Engine benötigt). Dazu importiert Ihr einfach das Projekt "baseclasses.sln" (es befindet sich in "TriBase\Include\DShowBaseClasses") in Visual C++ 2005 Express.

Im importierten Projekt (das gilt für ALLE in der 2005er-Version importierten Projekte) müssen erst einmal die hinzugelinkten Libraries geändert werden:
- (entfernen): odbc32.lib odbccp32.lib (das sind die beiden letzten)
- (hinzufügen): kernel32.lib user32.lib gdi32.lib winspool.lib comctl32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib

Beim Kompilieren wird es einige Fehler und Warnungen geben.
Die Warnungen beziehen sich auf die alten unsicheren Funktionen wie strcpy. Wer mag, ersetzt sie durch die Neuen. Anderenfalls kann man das Makro _CRT_SECURE_NO_DEPRECATE setzen (am besten ganz oben in der jeweiligen Datei) und mit #pragma warning(disable:4995 4996) diese Warnungen ignorieren.

Die Fehler sind hauptsächlich solche, wo eine Zählvariable einer for-Schleife außerhalb dieser Schleife noch einmal verwendet wurde. Es reicht, sie einfach noch einmal zu deklarieren. Also aus

C-/C++-Quelltext

1
2
for(int i = 0; i < 100; i++) ...
for(i = 10; i < 200; i++) ...


wird

C-/C++-Quelltext

1
2
for(int i = 0; i < 100; i++) ...
for(int i = 10; i < 200; i++) ...


An manchen Stellen wird auch nach der Schleife noch einmal auf die Zählvariable zugegriffen. Dann muss man die Zählvariable außerhalb der Schleife deklarieren. Also aus

C-/C++-Quelltext

1
2
for(int i = 0; i < 1000; i++) ...
if(i == 1000) ...


wird

C-/C++-Quelltext

1
2
3
int i;
for(i = 0; i < 1000; i++) ... // Wichtig: Hier das "int" wegnehmen!
if(i == 1000) ...


Dann gibt es noch einen weiteren Fehler bei den Base-Classes, und zwar in der Datei "ctlutil.h". Die Zeile, wo der Fehler liegt:

C-/C++-Quelltext

1
operator=(LONG);


muss umgeändert werden in:

C-/C++-Quelltext

1
COARefTime& operator=(LONG);


Die Base-Classes sollten sich nun kompilieren lassen.
Am besten kompiliert Ihr sowohl die Release- als auch die Debug-Version.
Die erzeugten Libraries (im Release-/Debug-Ordner) benennt Ihr in "StrmBase.lib" bzw. "StrmBaseD.lib" um und kopiert sie nach "TriBase\Lib".

------------------------------

4. Kompilieren der Engine: Wieder zuerst die Projektdatei importieren.

Im importierten Projekt (das gilt für ALLE in der 2005er-Version importierten Projekte) müssen erst einmal die hinzugelinkten Libraries geändert werden:
- (entfernen): odbc32.lib odbccp32.lib (das sind die beiden letzten)
- (hinzufügen): kernel32.lib user32.lib gdi32.lib winspool.lib comctl32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib

Jetzt das Projekt kompilieren. Es wird wieder einen Haufen Warnungen und Fehler geben.
Die Warnungen bekommt man weg (wenn man zu faul ist, um die neuen sichereren Funktionen zu nutzen), indem man in der "TriBase.h" direkt unter folgender Zeile:

#define DIRECTINPUT_VERSION (0x0800)

folgende beiden Zeilen einfügt:

#define _CRT_SECURE_NO_DEPRECATE
#pragma warning(disable:4995 4996)

Die Fehler behebt man genauso wie schon oben bei den Base-Classes beschrieben.
Es geht immer nur um for-Schleifen - kein großes Problem.

Wenn alle Fehler entfernt wurden, sollte sich die Engine kompilieren lassen. Kompiliert sowohl die Release- als auch die Debug-Version. Die DLL-Dateien werden automatisch nach "TriBase\Bin" und in das Windows-Systemverzeichnis kopiert. Die generierten LIB-Dateien sollten in "TriBase\Lib" gelandet sein.

------------------------------

5. Nun können die Tools und die (Bei)Spiele kompiliert werden. Auch hier müssen wieder einige for-Schleifen korrigiert werden. Und nicht vergessen: Bei jedem Projekt die gelinkten Libraries ändern! Hier noch einmal:

- (entfernen): odbc32.lib odbccp32.lib (das sind die beiden letzten)
- (hinzufügen): kernel32.lib user32.lib gdi32.lib winspool.lib comctl32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib

------------------------------

Das war's. Wahrscheinlich habe ich irgendetwas vergessen. Einfach fragen ;)

DarkFitzi

Alter Hase

Beiträge: 608

Wohnort: Eisenberg, Thüringen

Beruf: Schüler, 10te Klasse

  • Private Nachricht senden

2

22.01.2006, 19:10

so ist ausprobiert und es klappt :top:
Ich würde die Welt gern verbessern, doch Gott gibt mir den Sourcecode nicht! :-(

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

4

22.01.2006, 21:11

Bei mir bleiben diese beiden Fehler:

Zitat

tbVideo.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CAsyncReader::CAsyncReader(char *,struct IUnknown *,class CAsyncStream *,long *)" (??0CAsyncReader@@QAE@PADPAUIUnknown@@PAVCAsyncStream@@PAJ@Z)" in Funktion ""public: __thiscall CMemReader::CMemReader(class CMemStream *,class CMediaType *,long *)" (??0CMemReader@@QAE@PAVCMemStream@@PAVCMediaType@@PAJ@Z)".

tbVideo.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CBaseVideoRenderer::CBaseVideoRenderer(struct _GUID const &,char *,struct IUnknown *,long *)" (??0CBaseVideoRenderer@@QAE@ABU_GUID@@PADPAUIUnknown@@PAJ@Z)" in Funktion ""public: __thiscall tbVideoRenderer::tbVideoRenderer(struct IUnknown *,long *)" (??0tbVideoRenderer@@QAE@PAUIUnknown@@PAJ@Z)".


// Edit: Problem gelöst: Wer diese Fehler hat, hat beim Kompilieren der ShowBaseClasses die UNICODE-Varianten genommen (war mir erst nicht sicher und hab später nicht mehr dran gedacht, zu wechseln)

Anonymous

unregistriert

5

25.01.2006, 12:49

:crying:

Hallo,

wo kann man denn genau die Dateien entfernen? Ich habe keine Einstellungen für den Linker gefunden.

mfg Thomas

Anonymous

unregistriert

6

25.01.2006, 14:05

:wirbel:

Ok, hab's gefunden. Unter Bibliotekar. Aber das wisst ihr alle ja schon.

mfg Thomas

Anonymous

unregistriert

7

25.01.2006, 15:23

:)

Dein Aufwand hat sich gelohnt. Bei mir funktioniert es auch.

Vielen Dank!

Thomas

8

03.02.2006, 00:09

Hi

Möchte auch gerne mit der Tribase-Engine in VS c++ 05 Exp coden.
Ist diese Anleitung speziell für die Tribase 2.0 oder auch für die von der ersten Auflage? Kenn mich nicht mehr aus (müähh).

Bei mir hat er noch die Fehler im Debug-Modus. Release hat denselben.


Quellcode

1
2
3
4
5
6
7
------ Erstellen gestartet: Projekt: BaseClasses, Konfiguration: Debug Win32 ------
Kompilieren...
wxdebug.cpp
c1xx : fatal error C1083: Datei (Quelle) kann nicht geöffnet werden: ".\wxdebug.cpp": No such file or directory
Das Buildprotokoll wurde unter "file://e:\Programme\TriBase\Include\DShowBaseClasses\Debug\BuildLog.htm" gespeichert.
BaseClasses - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

9

03.02.2006, 01:57

Ok, habs dann noch hingekriegt :)

Ich hab einfach den Verweis auf "wxdebug.cpp" gelöscht

Ausserdem musste ich noch im Bibliothekar->Befehlszeile die Zusätzliche Optionen auf "..\..\lib\strmiids.lib /nodefaultlib " setzen

TriBase copmilieren hat laut Anleitung eh super hingehaut

*freu* endlich... DANKE :huhu:

Anonymous

unregistriert

10

05.02.2006, 22:23

hey klasse man dann probiere es ich auch morgen! ;)

Werbeanzeige