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

01.01.2009, 16:28

Fehler bei Einbindung der TriBase-Engine

Hallo,

ich habe zu Weihnachten das Buch "3D-Spielprogrammierung" bekommen und verzweifle langsam die TriBase-Engine einzubinden.
Ich benutze die
[list]
- Express-Edition von Visual C++
- DirectX-SDK von 2005 (auf der CD mitgeliefert)
- das neuste Microsoft SDK (ich denke, dass ist das gewünschte Platform SDK)
- die TriBase-Engine habe ich in das Verzeichnis "E:\Programmieren\C++\Spieleprogrammierung\CD\TriBase" kopiert"[/list]
Nun habe ich noch die Include-Dateien und die Bibliotheken hinzugefügt und bei den Projekteigenschaften die TriBase-Libs gelinkt.

Wenn ich nun ein leeres Fenster erstellen möchte, kommen folgende Fehlermeldungen:
[list]
- {Projektpfad}\fenster.cpp(13) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'Move'
- {Projektpfad}\fenster.cpp(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
- {Projektpfad}\fenster.cpp(30) : error C2664: 'tbDoMessageLoop': Konvertierung des Parameters 2 von 'int (__cdecl *)(float)' in 'tbResult (__cdecl *)(float)' nicht möglich
Keine Funktion mit diesem Namen im Gültigkeitsbereich stimmt mit dem Zieltyp überein
[/list]Es erscheinen noch mehr Fehler, aber das sind die, die in der Unit "Fenster.cpp" erscheinen. Ich hänge nochmal den Code für die bessere Verständlichkeit an. Der Code ist fast der selbe wie bei dem Beispielprojekt.

Ich hoffe ihr wisst wo mein/e Fehler liegen.
Wünsche allen einen guten Rutsch, Gruß Janek
---

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
//Erzeugen eines Fensters mit Nachrichtenschleife


#include <Windows.h>
#include <TriBase.h>
#include "InitWindow.h"

//Render-Funktion (leer)

tbResult Render(float fNumSecsPassed) {
    return TB_OK;
}

//Move-Funktion (leer)

rbResult Move(float fNumSecsPassed) {
    return TB_OK;
}

//Windows-Hauptfunktion

int WINAPI WinMain(HINSTANCE hInstace,
                   HINSTANCE hPrevInstance,
                   char* pcCmdLine,
                   int iShowCmd)
{
    //Tribase-Engine initialisieren

    tbInit();

    //Fenster Initialisieren

    InitWindow(640, 480, "Beispielprogramm - leeres Fenster",NULL);

    //Nachrichtenschleife

    tbDoMessageLoop(Render,Move);

    //Fenster herunterfahren

    ExitWindow();

    //Tribase-Engine herunterfahren

    tbExit();

    return 0;
}

2

01.01.2009, 17:05

Zitat

rbResult Move(float fNumSecsPassed) {

3

01.01.2009, 17:57

Danke.
Jetzt konnte ich Fenster.cpp komplett kompilieren, aber ich hatte noch Probleme beim einlesen von Strings.
z.B.
in der Funktion

C-/C++-Quelltext

1
    g_hWindow = CreateWindow((LPCWSTR)"Direct3D window",(LPCWSTR)pcName, [...];

musste ich die Chars jetzt in LPCWSTR casten. Wieso muss nur ich das machen und nicht alle. Liegt das an der 2008er Version von Visual C++?

Gruß Janek

//Edit
Rechtschreibfehler beseitigt
Außerdem habe ich schon herausgefunden, dass meine Problemlösung nicht gut ist, da ich eine Funktion für eine Umwandlung von AnsiString zu Unicode brauche...

5

02.01.2009, 00:46

Erstmal danke für den Link. ;)
Ich habe nur noch ein kleines Problem:
Wenn ich eine Textvariable habe, kann ich dann trotzdem

C-/C++-Quelltext

1
TEXT(VARIABLE)

schreiben?
Denn bei der Variable (vielleicht ist es auch eine Konstante) "pcName" geht dies nicht, sondern es wird die Fehlermeldung "LpcName ist ein undeklarierter Bezeichner.", womit der Compiler ja auch Recht hat.

Hat noch jemand eine Idee wie ich dieses Problem löse?

6

02.01.2009, 14:34

verwende statt char tchar.
und wenn du std::string verwenden willst, musst du dir (afaik, guck aber ggf. besser nach) selbst was basteln:

C-/C++-Quelltext

1
typedef std::base_string<tchar, char_traits<tchar>> tstring;

hoffe, das war aus dem stehgreif so richtig ;)

7

03.01.2009, 10:56

Hmmh,
also ich habe noch nicht so die Erfahrung in C++ und vor allem nicht in Visual C++, deswegen dauern bei mir die Antworten etwas länger.
Ich muss also entweder gleich bei der Deklaration die Variable pcName nicht als char*, sondern als tchar deklarieren oder eine Typendefinition vornehmen. Bei letzteres hätte ich nun noch nicht den Plan was da genau gemacht wird :oops:

Naja. Ich gucke mal was ich daraus bastel

8

03.01.2009, 11:38

tchar ist ein gerenischer typ, d.h., bei compilierung mit UNICODE wird er nach wchar_t (zwei-Byte-Zeichentyp für Unicode), und bei compilierung ohne nach char aufgelöst.

Werbeanzeige