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

14.10.2005, 17:48

Fehler gleich am Anfang - "DLL-Datei D3DX9D nicht gefun

Erstmal Hi alle,

Bin neu hier und hab mir vor 2 Tagen das Buch gekauft... Jetzt wollt ich grad einmal die allererste Übungsaufgabe machen und schon scheitere ich *schäm*

Erstmal der Code:

C-/C++-Quelltext

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

int WINAPI WinMain(HINSTANCE hINstance, HINSTANCE hPrevINstance, LPSTR lpCmdLine, int nShowCmd)
{
    if(tbInit())
        return 1; // FehlerCode 1 ist willkürlich gewählt

    if(tbExit())
        return 1;

    return 0;
};


Der Code wird fehlerfrei kompiliert. Außerdem habe ich in meinen VC++6 Optionen die Verzeichnisse der DX9 SDK angegeben und die Verzeichnisse der Tribase Lib/Includes. Auch hab ich in meinen System32 Ordner die Tribase-DLL Dateien...

Jetzt kommt aber der Fehler "Die erforderliche DLL-Datei D3Dx9D.DLL wurde nicht gefunden" beim Ausführen.

Frage:
1.) Warum kommt dieser Fehler?
2.) Warum muss man überhaupt die LIB-Dateien unter Optionen einbinden, wenn man schon die Header-Dateien inkludiert, müssten die nicht das selbe enthalten?
3.) Und wenn man schon Header UND Libs eingebunden hat, warum braucht das Programm dann immer noch die DLLs?

Wär nett wenn das jemand erklären könnte ;)

2

14.10.2005, 18:02

hmm.. hast du das DirectX SDK installiert?!

Sonnst geh mal bei Build Propertis und stell mal auf Release... dann sollte der die d3dx9.dll nehemen--- die d3dx9d.dll ist nur zum debuggen..
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

3

14.10.2005, 18:28

Jup klar, DX SDK 9 is drauf... Zwar nicht das von der CD, sondern das aktuelle von der Microsoft Homepage, aber das dürft ja nix ausmachen...

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

4

14.10.2005, 18:37

die datei die du brauchst wird manchmal vom sdk einfach nicht mitinstalliert. die ist auf der cd beim sdk in irgendeinem untervezeichnis in einer cab datei. einfach suchen und dann manuell ins verzeichnis windows/system 32 kopieren.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

15.10.2005, 00:17

Das prob ist, dass die neuen sdk eine neue D3DX dll bekommen und zwar sind diese durchnummeriert. Früher wurde die alte immer ersetzt. Du müsstest also doch das sdk von der cd nehmen oder dafür sorgen, dass er die neue dll annimmt(aktuelle ist glaube ich d3dx_26.dll
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Paul_C.

Frischling

Beiträge: 81

Wohnort: Duisburg

  • Private Nachricht senden

6

31.10.2005, 23:47

Das Problem habe ich auch. Wie macht man das denn, das er die neue Bezeichnung nimmt? Denn die .lib - Datei scheint noch den gleichen Namen zu haben.

Anonymous

unregistriert

7

02.11.2005, 00:53

Hallo,

Ich habe das Gleiche getan wie al Ximedes :
"Altes" Buch (2003) <--> neuestes SDK (10/2005)

Wie nox schrieb, werden seit einiger Zeit die Debug-DLL D3DX mit einer zusätzlichen Nummerierung installiert (Bei 10/05 =27).

Die D3DX.lib ist immer noch vorhanden, anscheinend soll sie aber nur die entsprechende DLL anziehen, während sie früher statische Funktionen enthielt, die alle in die EXE wanderten. (Korrigiert mich bitte)

Also, TriBase neu kompilieren.
Läuft prima durch, bis tbEffect::Pass() an der Reihe ist.
Dieses möchte in DirectX eine Funktion Pass aufrufen, die aber dort nicht mehr existiert.
Wurde anscheinend ersetzt durch
BeginPass()
CommitChanges()
EndPass()
Damit kann ich im Moment noch nicht umgehen.

Vielleicht weiß David ja schon mehr darüber.

Viele Grüße
almidi

Anonymous

unregistriert

8

02.11.2005, 03:21

Hallo zusammen,

Inzwischen habe ich
- BeginPass()
- CommitChanges()
- EndPass()
in tbEffect eingebaut. (5 Minuten Arbeit : Pass() kopieren, Namen ändern, Fertig)

Beim Kompilieren fallen dann die Stellen auf, an denen in anderen Quelltexten noch Pass() steht. Dort setzt man entsprechend BeginPass() und EndPass() ein und ist auch damit schnell fertig.

------
Am Ende warnt der Linker, daß er bei streambased.lib keine vc60.pdb gefunden hat. Laut Doku ist das auch nicht schlimm, sofern man sich sicher ist, daß streambased.lib die richtige ist. Und das ist ja der Fall, wenn man sich aus dem TriBase-Verzeichnis bedient.
------
Trotzdem wollte ich streambased.lib neu erstellen.
Im Baseclasses-Ordner fehlte dann aber wxdebug.cpp, warum auch immer. Da ich erst mal keine gefunden habe, habe ich versucht, TriBase ohne streambased.lib zu linken.
Das gab Probleme bei tbMusic und tbVideo, weil dieses ordentlich Funktionen aus streambased.lib nutzen.
Da es aber nur diese beiden Problemkinder gab, habe ich sie aus TriBase herausgenommen.
---------
Fazit :
a) TriBase läßt sich unter dem neuesten DX9-SDK kompilieren, nachdem man Anpassungen bei der Funktion effect::Pass() durchgeführt hat.

b) Besteht man auch auf einem Neukompilieren der streambased.lib, weil man gerade Zeit hat, findet man diese unter dem neuen SDK nicht wieder und man muß deshalb tbVideo und tbMusic aus TriBase herausnehmen.

------------
Damit stehen uns wohl einige Optionen offen.

Zum Schluß noch einmal der Dank an David für sein gelungenes Buch. Ich lerne sehr viel daraus, die Quelltexte sind sauber geschrieben und gut dokumentiert. Vielleicht findet er ja mal Zeit, die TriBase auf die neuen SDK-Gegebenheiten anzupassen.

Bis dahin allen viel Spaß beim Programmieren.
almidi

Anonymous

unregistriert

9

13.11.2005, 16:48

Problem gelöst

Hatte das gleiche Problem, durch Installation der neuen SDK haben die Beispielprogramme nicht mehr funktioniert wegen der fehlenden d3dx9d.dll.
Habe das Problem jetzt so gelöst das ich einfach eine Kopie der vorhandenen d3dx9d_27.dll angelegt habe und diese in d3dx9d.dll unbenannt habe, vielleicht nicht ganz sauber aber es hat auf jeden Fall funktioniert ;-)

Werbeanzeige