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

31

12.02.2012, 11:39

Moin!

Danke für die fixe Antwort :-)

Also das cPath Problem habe ich grade gelöst, da musste man einfach das GetPath(cPath) komplett durch die Pfadangabe zu der Datei ersetzen.
Das Problem bei tbDirect3D ist auch gelöst, das fehlte ein Instance().
Ich glaube ich muss aber bei den Create-Funktionen noch was ändern.

Wenn ich den Code entsprechend anpasse, meckert der Compiler aber noch immer.

Quellcode

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
1>ClCompile:
1>  Terrain.cpp
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(88): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(103): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(106): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(160): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(165): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(168): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(196): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(198): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(226): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(228): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(317): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(332): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(335): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(389): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(394): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(397): warning C4018: '<=': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(452): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(454): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(500): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>d:\3d-spieleprogrammierung-update\eigene projekte\terrain\terrain.cpp(502): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>ManifestResourceCompile:
1>  Alle Ausgaben sind aktuell.
1>Terrain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_D3DXLoadSurfaceFromFileA@32" in Funktion ""public: enum tbResult __thiscall CTerrain::Create(void)" (?Create@CTerrain@@QAE?AW4tbResult@@XZ)".
1>Terrain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_D3DXGetImageInfoFromFileA@8" in Funktion ""public: enum tbResult __thiscall CTerrain::Create(void)" (?Create@CTerrain@@QAE?AW4tbResult@@XZ)".
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".
1>D:\3D-Spieleprogrammierung-Update\Eigene Projekte\Terrain\Terrain (Debug).exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.
1>

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »-Ricken-« (14.02.2012, 08:36)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

32

12.02.2012, 14:16

Der Fehler kommt vom Linker und lässt darauf schließen, dass vermutlich eine DLL fehlt. Check also mal ob du da irgendwas vergessen hast. Oder du benutzt einfach das Projekt vom Spiel und packst deinen Code rein. Den Code vom Spiel kannst du dann ja löschen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

33

12.02.2012, 17:15

Habs mal ins die Game.cpp von Breakanoid kopiert.
Er meckert leider noch immer... :(

Quellcode

1
2
3
4
5
1>Game.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_D3DXLoadSurfaceFromFileA@32" in Funktion ""public: enum tbResult __thiscall CTerrain::Create(void)" (?Create@CTerrain@@QAE?AW4tbResult@@XZ)".
1>Game.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_D3DXGetImageInfoFromFileA@8" in Funktion ""public: enum tbResult __thiscall CTerrain::Create(void)" (?Create@CTerrain@@QAE?AW4tbResult@@XZ)".
1>D:\3D-Spieleprogrammierung-Update\Spiele\Spiel Breakanoid\Spiel Breakanoid (Debug).exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
1>
1>Fehler beim Erstellen


Liegt es evtl daran dass ich innerhalb der Funktionen aus cPath den Dateipfad ("Terrain.bmp") gemacht habe und in den Funktionsaufrufen das cPath einfach weggelassen habe?
Aus tbResult CTerrain::Create(char cPath) ist ja jetzt tbResult CTerrain::Create() geworden...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »-Ricken-« (12.02.2012, 17:30)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

34

12.02.2012, 17:38

Ah das Problem ist ein anderes. Es gibt verschiedene Möglichkeiten einen String darzustellen (intern im Speicher). Die Version die er bei dir nicht finden kann möchte ASCII Strings haben, deswegen das A am Ende (_D3DXLoadSurfaceFromFileA@32). Es gibt noch eine Version die Unicode benutzt. Diese müsste dann _D3DXLoadSurfaceFromFileW heissen. Das W zeigt dir, dass es sich um die Unicode Version handelt. W steht für Wide-Character. C++ weiß bei einem String wie "hallo" natürlich nicht was du damit nun meinst, bzw kann nicht verschiedene Darstellungen auf einmal verwenden. Wenn du aber L"hallo" schreibst, so sagst du C++, dass der String ein Unicode String ist. Ich weiß nicht genau ob ich das so komplett richtig erklärt habe, aber für dich wichtig wäre, vor den String ein L zu schreiben. Der Linker gibt dir den Fehler jetzt, weil er keine ASCII Version für die Funktion definiert hat.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

35

12.02.2012, 17:51

Du bist ja wieder fix ;-)
Merci!

Ich weiß nicht ob ich dich jetzt richtig verstanden habe. Aber wenn ich aus

Quellcode

1
D3DXGetImageInfoFromFile("Terrain.bmp",&ImgInfo);

einfach

Quellcode

1
D3DXGetImageInfoFromFile(L"Data\\Terrain.bmp",&ImgInfo);

mach, zeigt der Compiler nen Fehler an (unterkringelt das L also in rot) und sagt:
Das Argument vom Typ ""const wchar_t*"" ist mit dem Parameter vom Typ ""LCPSTR"" inkompatibel. Gleiches bei D3DXLoadSurfaceFromFile(pHeightmap,0,0,"Terrain.bmp",0,D3DX_DEFAULT,0,0);

Wenn ich versuche zu kompilieren sagt er:

Zitat

'D3DXGetImageInfoFromFileA': Konvertierung des Parameters 1 von 'const wchar_t [17]' in 'LPCSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »-Ricken-« (12.02.2012, 17:58)


36

12.02.2012, 18:24

Sehr merkwürdig... Habe jetzt mal unter zusätzliche Abhängigkeiten "D3DX9D.lib" hinzugefügt, nun lässt sich das Ding kompilieren. Wenn ich dann im Spiel drin bin, sehe ich allerdings genau das gleiche wie vorher. Also das Breakanoidlevel, so wie ich es zuvor umgebaut habe. Kein Terrain weit und breit... ?(

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

37

12.02.2012, 18:24

Mit irgendwas muss man sich ja vom lernen abhalten;)
Puh das sind so Sachen bei denen ich mir auch echt nicht sicher bin. Du könntest das Text Makro benutzen. Dann guckt er automatisch was deine Compilereinstellungen sind und versucht die passende Variante zu nehmen. Da wollte er ja grad wieder die ASCII Variante benutzen, von daher sollte es eigentlich ohne L funktionieren. Teste also mal TEXT("pfad") anstatt "pfad" bzw L"pfad". Dann klappt es hoffentlich ;) Ansonsten guck noch mal bei den Beispielprogrammen. Da läd er doch bestimmt auch Dateien oder Texturen mit Pfadangaben. Da müsstest du es dir dann abgucken können. Ansonsten hat hier vielleicht jemand mehr Ahnung davon als ich und kann dir bei dem Problem besser weiterhelfen.
Wenn würde ich dafür aber vielleicht lieber einen neuen Thread für da Problem machen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

38

12.02.2012, 18:26

Noch mal, da wir wohl gleichzeitg gepostet haben ;)

Sehr merkwürdig... Habe jetzt mal unter zusätzliche Abhängigkeiten
"D3DX9D.lib" hinzugefügt, nun lässt sich das Ding kompilieren. Wenn ich
dann im Spiel drin bin, sehe ich allerdings genau das gleiche wie
vorher. Also das Breakanoidlevel, so wie ich es zuvor umgebaut habe.
Kein Terrain weit und breit...

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

39

12.02.2012, 18:40

Gut dann lags doch an der DLL;) Hmm das ist merkwürdig. Hast du vielleicht noch den alten Code mit drin? Ansonsten hat er vielleicht gesagt er kann nicht kompilieren. Dann wirst du normal gefragt ob du den letzten erfolgreichen Build ausführen möchtest. Das wäre dann ja die alte Version. Vielleicht hast du da auf ja geklickt ohne genau zu gucken.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

40

12.02.2012, 18:41

Ja, der alte Code ist noch drin, da er ja sonst auch meckert.
Habe aber auf keinen Fall die alte Build ausgeführt.

Muss der alte Code zwingend raus? Ich muss ja eh beides miteinander kombinieren...
Hab nur keinen Schimmer wie ich das anstellen soll.
Der alte Code darf ja sicher nicht komplett weg, oder? Sonst geht ja gar nicht mehr...
Welchen Teil darf ich denn löschen?

Werbeanzeige