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

24.07.2008, 23:34

Frage zu Direct3DCreate9

Guten abend, kurze Frage nochmal zu dem Fehler:

Quellcode

1
1>Direct3DEnum.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Direct3DCreate9@4" in Funktion ""enum tbResult __cdecl GetDirect3DParameters(struct SDirect3DParameters *)" (?GetDirect3DParameters@@YA?AW4tbResult@@PAUSDirect3DParameters@@@Z)".


Der Fehler bedeutet doch das in Direct3DEnum.h/.cpp eine Funktion Direct3DCreate9 aufgerufen wird die einen Verweis auf ein externes Element enthält welches nicht verlinkt wurde.

Man kann vermuten das vlt. *.lib Datein fehlen gerade die zu DX9 gehören.

Aber unter:

Projekt-Eigenschaften-linker Eingabe sind:
zusätzlich:d3d9.lib
dxerr9.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comctl32.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib

und geerbt:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib

Die doppelten werde ich dann gleich noch entfernen. Man sieht d3d9.lib
dxerr9.lib sind beide enthalten.

unter Optionen:
VC++ Verzeichnisse sind folgende Verleinkt:
Ausführbare:
C:\Program Files (x86)\Microsoft DirectX SDK (March 2008)\Utilities\Bin\x64
C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Utilities\x64
Include:
C:\Program Files (x86)\Microsoft DirectX SDK (March 2008)\Include
C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Include
Bibliotheken:
C:\Program Files (x86)\Microsoft DirectX SDK (March 2008)\Lib\x64
C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Lib

Bezogen auf DX9 müßte doch alles gelinkt sein oder?

In der tribase.h habe ich die Libs noch so eingebunden:

C-/C++-Quelltext

1
2
#pragma comment (lib, "DxErr9.lib") 
#pragma comment(lib, "d3d9.lib")


wo kann ich noch guggn?

Axo, wenn ich die schnittstelle erzeuge,

C-/C++-Quelltext

1
2
// Globale IDirect3D9-Schnittstelle erzeugen

g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);


stehen mit unter g_pD3D alle funktionen zur verfügung -.- also deklaration steht ja.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

24.07.2008, 23:37

Ich weiss jetzt nicht genau, ob es das ist, aber ich sehe keine d3d9d.lib (debug-version)

3

25.07.2008, 00:19

die d3d9d.lib gibt es halt bei mir nicht nur d3d9xd.lib und wenn ich diese einbinde ändert sich nichts. :(

wird ne lange n8 ^^

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

25.07.2008, 00:40

Hmm..

Ich habe genau das hier im Input und hald Includeverzeichnisse gelinkt, wie du. Damit klappt es bei mir.

Quellcode

1
dxerr.lib dxguid.lib d3dx9d.lib d3d9.lib  dinput8.lib winmm.lib comctl32.lib


Und hald bei Release habe ich anstatt d3dx9d.lib d3dx9.lib. Damit kriege ich alles zum laufen. Wie es hald mit der TB aussieht, weiss ich nicht, sollte aber nicht allzu viel sein die zu linken.

5

25.07.2008, 01:57

Irgendwas scheint da noch nicht zu stimmen, denn er findet auch nicht die fehlerfunktionen:

C-/C++-Quelltext

1
2
tbdirect3d.cpp(244) : error C3861: "DXGetErrorString": Bezeichner wurde nicht gefunden.
tbdirect3d.cpp(244) : error C3861: "DXGetErrorDescription": Bezeichner wurde nicht gefunden.

6

25.07.2008, 03:30

<DXErr.h>
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

7

25.07.2008, 04:10

An dem Create-Fehler sitz ich immernoch, ich geh erstmal ins bett schau mir morgen die ganzen libs an, was in frage kommen wrde und link mal alle durch :>

n8i

8

25.07.2008, 11:33

Das ist die fehlermeldung wenn ich <dxerr.h> nicht includiere

C-/C++-Quelltext

1
2
1>...\lsdirect3d.cpp(246) : error C3861: "DXGetErrorString": Bezeichner wurde nicht gefunden.
1>...\lsdirect3d.cpp(246) : error C3861: "DXGetErrorDescription": Bezeichner wurde nicht gefunden.


includiere ich diese dann erhalte ich:

C-/C++-Quelltext

1
2
3
Direct3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_Direct3DCreate9@4".

Direct3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_DXGetErrorStringA@4" in Funktion ""public: enum tbResult __thiscall lsDirect3D::Init(struct tbConfig *,char *,struct HWND__ *,struct HICON__ *)" (?Init@tbDirect3D@@QAE?AW4tbResult@@PAUlsConfig@@PADPAUHWND__@@PAUHICON__@@@Z)".


includiert habe ich nun:

#include <d3d9.h>
#include <d3dx9.h>
#include <dxerr.h>

bin bisschen verwirrt warum er dabei Linkerfehler bringt.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

9

25.07.2008, 11:43

du solltest eigl nur das einbinden, was drakon gepostet hat, dann gehts!

Quellcode

1
dxerr.lib d3dx9d.lib d3d9.lib dxguid.lib dinput8.lib

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

25.07.2008, 16:57

Zitat von »"TrommlBomml"«

du solltest eigl nur das einbinden, was drakon gepostet hat, dann gehts!

Quellcode

1
dxerr.lib d3dx9d.lib d3d9.lib dxguid.lib dinput8.lib


Genau.

Du hast immernoch die erste Funktion, die aufgerufen wird und er nicht findet, also stimmt da schon mal was grundlegendes nicht. Link einfach mal das, was ich da habe und den Rest lass mal raus. Dann siehts du schon, was noch dazu kommt.

btw:
Hast du Ferien, dass du noch um 4 da dran sitzt? :D

Werbeanzeige