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

08.04.2009, 12:49

TriBase-Engine - DLL not found

Hallo!
ich habe mich jetzt intensiv in ANSI C++ und der WinAPI beschäftigt und habe mir das Buch 3D-Spieleprogrammierung mit DirectX 9 und C++ gekauft. Nachdem ich in die Projektoptionen die {TriBase}\Include in die Include-Paths und {Tribase}\Lib in die Lib-Pfade eingefügt habe und die TriBase.lib in mein Projekt gelinkt habe (Projektmappen-Explorer, *rechtsklick* hinzufügen "TriBaseD.lib"), versuchte ich mit folgendem Code zu kompilieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <tribase.h>
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR iCmdLine, int iCmdShow) {
    if(tbInit()) {
        tbVFile* virFi = new tbVFile;
        virFi->Init("C:/datei.dat");
        void* pOut = NULL;
        virFi->Read(10, pOut);
        virFi->SaveToFile("C:/test2.dat");
        TB_SAFE_DELETE(virFi);
    }
    else {
        tbWriteToLog("Es ist ein Fehler aufgetreten!");
    }
    tbExit();
}


Dass die <TriBase.h> gefunden wurde ist klar, jedenfalls waren die IntelliSense-Funktionen für die tb*-Funktionen da. Beim ersten mal kompilieren ist alles normal, DirectX - 0 Fehler, 0 Warnung(en).
Beim 2. mal kompilieren passiert gar nichts. Wenn ich allerdings debugge, gibts:

Quellcode

1
2
Debugger: Eine nicht behandelte STATUS_DLL_NOT_FOUND-Ausnahme wurde während des Ladeprozesses ausgelöst und führt zu einem Programmabbruch.
Das Programm "[3512] DirectX.exe: Systemeigen" wurde mit Code -1073741515 (0xc0000135) beendet.

Wo findet man heraus, welche DLL das ist? Wie kann ich den Fehler beheben? Soll ich mal versuchen, die Exception zu catchen?

2

08.04.2009, 13:55

Das wird dir bei deinem Problem wahrscheinlich nicht helfen, aber du hast auf jeden Fall mal vergessen, tbVFile::Exit() aufzurufen.

3

09.04.2009, 15:06

Nein, das hat leider nichts gebracht.
Der aktuelle Code (mit Nutzlos-Catch der Exception und return 0):

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
#include <TriBase.h>
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR iCmdLine, int iCmdShow) {
    try {
        if(tbInit()) {
            tbVFile* virFi = new tbVFile;
            virFi->Init("C:/datei.dat");
            void* pOut = NULL;
            virFi->Read(10, pOut);
            virFi->SaveToFile("C:/test2.dat");
            virFi->Exit();
            TB_SAFE_DELETE(virFi);
        }
        else {
            tbWriteToLog("Es ist ein Fehler aufgetreten!");
        }
        tbExit();
    }
    catch(...) {
        MessageBox(NULL, TEXT("Ein Fehler ist aufgetreten!"), TEXT("Fehler!"), MB_ICONERROR | MB_OK);
    }
    return 0;
}


Aber ich denke, der stimmt sowieso. Ich glaube, ich habe nicht alles richtig installiert, oder?
Also DirectX ist ja hier noch nicht notwendig, die Tribase-Engine habe ich so erst mal zu den Stand art-Verzeichnissen hinzugefügt (Im VS Pro 2008)
Extras --> Optionen --> Projekte und Projektmappen --> VC++-Verzeichnisse:

Includedateien:
C:\Programme\Microsoft DirectX SDK (November 2008)\Include
C:\Programme\Microsoft DirectX SDK (Dezember 2005)\Include
(ich kann doch November 2008 nehmen, oder? Dann brauch ich 05 nicht mehr)
C:\Dokumente und Einstellungen\Admin\Desktop\Archiv\TriBase\Include

Diese Platform-SDK ist doch eigentlich schon dabei, oder? Muss ich die explizit da noch angeben? Da steht eben noch:

$(WindowsSdkDir)\Include

Das ist doch das Platform SDK.

Bibliotheksdateien
C:\Programme\Microsoft DirectX SDK (November 2008)\Lib
C:\Dokumente und Einstellungen\Ad aCTa\Desktop\Archiv\TriBase\Lib

Soweit stimmt's doch, oder?
Dann: Projekt --> Eigenschaften --> Konfigurationseigenschaften --> Linker --> Eingabe --> Zusätzliche Abhängigkeiten:

In dieser Tabellenspalte habe ich einfach ohne Pfad im Modus "Debug" TriBaseD.lib hinzugefügt, im Modus Release TriBase.lib.

Wenn das soweit stimmt, habe ich keinen blassen Schimmer, was diese Debug-Ausgabe soll:

Quellcode

1
2
3
4
5
"DirectX.exe": "C:\Dokumente und Einstellungen\Admin\Desktop\DirectX\Debug\DirectX.exe" geladen, Symbole wurden geladen.
"DirectX.exe": "C:\WINDOWS\system32\ntdll.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\kernel32.dll" wurde geladen
Debugger: Eine nicht behandelte STATUS_DLL_NOT_FOUND-Ausnahme wurde während des Ladeprozesses ausgelöst und führt zu einem Programmabbruch.
Das Programm "[2024] DirectX.exe: Systemeigen" wurde mit Code -1073741515 (0xc0000135) beendet.


Compile-Log:


Quellcode

1
2
3
4
5
6
7
8
1>------ Erstellen gestartet: Projekt: DirectX, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>Verknüpfen...
1>Das Manifest wird eingebettet...
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Admin\Desktop\DirectX\DirectX\Debug\BuildLog.htm" gespeichert.
1>DirectX - 0 Fehler, 0 Warnung(en)
========== Erstellen: 1 erfolgreich, Fehler bei 0, 0 aktuell, 0 übersprungen ==========


Bitte Hilfe!

4

09.04.2009, 17:15

Schmeiß halt die TriBase-DLLs ins Windows-Verzeichnis.
Vielleicht vermisst er die...
fka tm

5

09.04.2009, 17:16

Ich hatte fast einen Lichtblick: ich habe vergessen, die TriBase.dll und die TriBaseD.dll in C:\WINDOWS\system32 zu kopieren. Die DLL wird korrekt geladen, leider trotzdem der Fehler:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"DirectX.exe": "C:\Dokumente und Einstellungen\Ad aCTa\Desktop\DirectX\Debug\DirectX.exe" geladen, Symbole wurden geladen.
"DirectX.exe": "C:\WINDOWS\system32\ntdll.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\kernel32.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\TriBaseD.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\d3d9.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\d3d8thk.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\gdi32.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\user32.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\msvcrt.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\advapi32.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\rpcrt4.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\secur32.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\version.dll" wurde geladen
"DirectX.exe": "C:\WINDOWS\system32\winmm.dll" wurde geladen
Debugger: Eine nicht behandelte STATUS_DLL_NOT_FOUND-Ausnahme wurde während des Ladeprozesses ausgelöst und führt zu einem Programmabbruch.
Das Programm "[1556] DirectX.exe: Systemeigen" wurde mit Code -1073741515 (0xc0000135) beendet.


EDIT: Schwupps, 1 Min vorher kam der Vorschlag. :)

6

09.04.2009, 17:21

Gedankenübertragung... ;)

Jetzt muß man nur noch wissen, welche DLL noch fehlt...

Welche Libs hast du denn eingebunden?
fka tm

7

09.04.2009, 17:29

Nur TriBase.lib und TriBaseD.lib.
Mal ein paar Screens (wenn's hilft)

(Link)


UND


(Link)

8

09.04.2009, 17:34

Oh, schreiben hätte es auch getan. ;)

Wo werden die DirectX-Libs eingebunden? Mit #pragma... ?
Auch da gibts eine Debug-Version (d3dx9d.lib glaube ich).

Ansonsten hilft es vielleicht, mit der Einstellung C++ -> Debuginformationsformat etwas herumzuspielen.
fka tm

9

09.04.2009, 17:45

Die müssen auch eigebunden werden? Na gut, hab jetzt in die Tabelle d3dx9.lib noch eingebunden - selber Fehler. Ich denke mal, ich muss jetzt alle Libs dort einbinden? Davon stand ja nichts im Buch, aber Aufgaben werden schon gestellt... Naja, steht irgendwo, was für Libs da rein müssen (Thread o.ä.)

10

09.04.2009, 17:51

Der Compiler bzw. Linker hat zumindest nicht gemeckert.
Kannst du es normal ausführen?
Welches Programm hast du denn in Arbeit?

Nimm dir den letzten Satz von meinem vorherigen Post noch mal vor. ;)
fka tm

Werbeanzeige