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

29.06.2012, 19:13

tbVFile->Init schlägt fehl

Hallo,

ich versuche mich gerade an Übungsaufgabe 2 aus dem Kapitel 2.2.8, jedoch bin ich frustriert da die tbVFile->Init() Methode immer wieder fehlschlägt und ich den Fehler nicht finden kann. Die Datei die ich öffnen möchte habe ich im Verlauf meiner Fehlersuche bereits in alle Unterverzeichnisse des Projektordners und in den Projektordner selbst gelegt. Falls das auch noch wichtig sein sollte: Ich arbeite mit Microsoft Visual C++ 2010 Express.

Quellcode:

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
// 3D-Spieleprogrammierung mit DirectX und C++
// 2. Kapitel
// 2. Aufgabe
// ReadFile.cpp: Liest eine Datei "Eingabe.txt" aus, transformiert die erhaltenen Vektoren mit der erhaltenen Matrix und schreibt diese in eine Datei "Ausgabe.txt"
//

#include <TriBase.h>

int main ()
{
    tbInit();

    // Variablen
    char sBuffer [24];                                      // Puffer mit 24 Bytes Platz
    void* pBuffer = reinterpret_cast<void*>(sBuffer);       // Zeiger auf den Buffer
    tbVFile* pVFile = new tbVFile;

    // Öffnen und einlesen der Datei
    if(pVFile->Init("Eingabe.txt"))
    {
        tbWriteToLog("Fehler beim Einlesen der Datei");
    }
    else
    {
        tbWriteToLog("Datei erfolgreich eingelesen");
    }

    tbExit();
}


Das ist der auf die wichtigsten Dinge herunterreduzierte Code, der Fehler tritt beim Einlesen der Datei (also in Zeile 19) auf. Auch das Logfile hat nicht wirklich Aufschluss gegeben:

Zitat

INFO: TriBase-Engine wird initialisiert... (tribase.cpp, Zeile 86, Funktion tbInit)
INFO: Initialisierung komplett! (tribase.cpp, Zeile 104, Funktion tbInit)
FEHLER: Die Datei eingabe.txt konnte nicht geöffnet, gelesen, erstellt oder beschrieben werden! (tbfile.cpp, Zeile 465, Funktion tbReadRawFile)
FEHLER: Die Datei eingabe.txt konnte nicht geöffnet, gelesen, erstellt oder beschrieben werden! (tbvfile.cpp, Zeile 41, Funktion tbVFile::Init)
Fehler beim Einlesen der Datei
INFO: TriBase-Engine wird heruntergefahren... (tribase.cpp, Zeile 113, Funktion tbExit)
INFO: Alle Speicherbereiche freigegeben! (tbmemory.cpp, Zeile 116, Funktion tbMemExit)
INFO: Herunterfahren abgeschlossen! (tribase.cpp, Zeile 149, Funktion tbExit)

Allerdings ist mir beim Absuchen der untergeordneten Header aufgefallen, dass die Funktion tbReadRawFile, welche den Fehler mindestens mitverursacht, nicht nur einen char* erwartet sondern auch einen void**, jedoch sagt mir letzteres nichts.

Ich bin für jede Hilfe schon im Voraus sehr dankbar,
MfG Freek

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

2

29.06.2012, 19:51

Hab mal im Buch nachgeschaut. Es gibt ja 3 Möglichkeiten für das Erstellen einer virtuellen Datei. Der Dateiname einer Datei ist eine Möglichkeit. TriBase wurde korrekt initialisiert und die Init-Methode sieht auch gut aus. Startest du das Programm über MSVC++ oder über die .exe? Die TExtdatei muss dann jeweils im Ordner der .exe oder der .vcxproj-Datei sein.

3

29.06.2012, 20:25

Sollte egal sein, da "Eingabe.txt" in allen Ordnern und Unterordnern des Projektes liegt, daher ist der Effekt deines Vorschlages leider gleich null.

Aber trotzdem erstmal Danke für die schnelle Antwort ;)

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

4

29.06.2012, 20:37

Vllt kann es sein dass die Datei eingabe.txt.txt heißt, da die Endung versteckt wird. Steht bei der Datei "Eingabe" oder "Eingabe.txt"?

5

29.06.2012, 20:45

Auch diese Möglichkeit habe ich bedacht: Die Dateiendungen werden bei mir angezeigt, daher heißt die Datei tatsächlich einfach nur Eingabe.txt

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

6

29.06.2012, 21:10

Also dieser void** wird dort mit Daten gefüllt (genauer gesagt, der Speicherbereich in dem die virtuelle Datei liegt).
Ich forsch grad in der TriBase-Engine rum wo die Meldung ausgegeben wird.

EDIT: Hast du überhaupt das VC 2010 TriBase Update?

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

7

29.06.2012, 22:00

Moment, du sagst, die Datei heißt "Eingabe.txt". Die Log-Funktion schmeißt aber die Fehlermeldung raus, dass es "eingabe.txt" nicht findet. Auch wenn du es im Code als "Eingabe.txt" angegeben hast.

Benenne mal sowohl den Code als auch die Datei selbst in "eingabe.txt" um.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

29.06.2012, 22:18

Unter Windows ist das egal.

9

29.06.2012, 23:32

Das mit der groß und Kleinschreibung ist auch einfach zu erklären: Ich habe alle vorhandenen Logs abgespeichert und wohl den falschen rausgezogen (wobei alle so ziemlich das gleiche ausspucken). Bei mir stimmen also Dateiname und Name im Programm überein. Gelöst ist mein Problem dadurch leider immer noch nicht :(

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

10

30.06.2012, 01:58

Ich hab gefunden wo es passiert. Irgendeine FileStats struktur oder so hat 0 Elemente. Ich konnte den Aufbau der Struktur nicht finden.

Werbeanzeige