|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Fossil Mini JLI'ler
Alter: 89 Anmeldedatum: 07.03.2006 Beiträge: 11 Wohnort: Tübingen Medaillen: Keine
|
Verfasst am: 08.04.2008, 12:25 Titel: Fehlermeldung beim Übersetzen der Programme des Kapitels 17 |
|
|
Hallo jli-Gemeinde!
Nach zwei Jahren frische ich meine Kenntnisse in jli-Spielprogrammierung wieder auf. Vor zwei Wochen habe jedoch leider ich einen totalen Festplatten-Crah gehabt und fast alles verloren, was im Bereich Programme lag. Die Buch-CD habe ich wieder installiert, aber die Programme ab ca. Kapitel 17 laufen nicht mehr. Das muß irgendetwas mit DirectDraw zu tun haben
Ich erinnere mich, daß ich früher dasselbe Problem hatte und ein zusätzliches Programm installieren mußte, weiß aber nicht mehr wie es heißt und wo ich es finde - natürlich habe ich das nicht aufgeschrieben. Ist auch schon zwei Jahre her.
Beispiel: Gameloop_QPC.cpp macht beim Kompilieren 3 Fehler in Zeile 47:
- error C 2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'lpDD7'
- error 2501: LPDIRECTDRAW7 Fehlende Speicherklasse oder Typenbezeichnung
- fatal error C1004: Unerwartetes Dateiende.
Wer kann mir helfen?
Dank Euch
Fossil _________________ Weissjurabeta |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.04.2008, 13:19 Titel: |
|
|
Du hast ein ; irgendwo vergessen. Und ohne Quelcode kann man fast gar nix sagen.
Also formuliere deine Fragen in Zukunft deutlicher und liefer mehr Informationen mit, dann kann dir schneller geholfen werden. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Fossil Mini JLI'ler
Alter: 89 Anmeldedatum: 07.03.2006 Beiträge: 11 Wohnort: Tübingen Medaillen: Keine
|
Verfasst am: 08.04.2008, 16:38 Titel: Fehlermeldung beim Übersetzen der Programme des Kapitels 17 |
|
|
Hallo Jonathan Klein,
Vielen Dank für Deine Nachricht. Deine Diagnose kann aber nicht zur Therapie führen, da ich gar kein eigenes Programm geschrieben habe, sondern das Programm, das direkt von der Buch-CD übernommen ist, compilieren wollte.
Gruß Fossil _________________ Weissjurabeta |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.04.2008, 17:08 Titel: |
|
|
Ich habe die CD leider nicht mehr zur Hand.
Poste mal die Zeilen mit den Fehler, mit 5 Zeilen davor und 5 dahinter oder so.
Das mit dem fehlenden ; hört sich nämlich nicht so an, als wären deine Einstellungen falsch. Evtl. hast du ja auch nur aus versehen ein Zeichen gelöscht? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 08.04.2008, 19:07 Titel: |
|
|
Welches DX SDK benutzt du? Die Version von der CD oder die Aktuelle von der MS Homepage?
Wenn du eine neuere Version, als die vom Buch, benutzt kann es nicht gehen weil sich manche Funktionen geändert haben ( Änderung bei den Übergabeparametern ).
Solltest du das SDK der Buch CD benutzen wäre es, wie Jonathan_Klein bereits sagte, am besten du schreibst die Fehlermeldungen. |
|
Nach oben |
|
|
Fossil Mini JLI'ler
Alter: 89 Anmeldedatum: 07.03.2006 Beiträge: 11 Wohnort: Tübingen Medaillen: Keine
|
Verfasst am: 10.04.2008, 14:22 Titel: Fehler beim übersetzen der Programme des Kapitels 17 |
|
|
Hallo Chris und Jonathan_Klein
Das Problem hat sich nicht lösen lassen.
Hier einige Programmzeilen vor der Fehlermeldung (Kapitel 17). Danach kommt direkt WINDOWS MAIN
CPP: | //Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
// DirectDraw-Objekte initialisieren
BOOL InitDirectDraw(HWND hWnd);
// Objekte/Speicher freigeben
void CleanUpDirectDraw(void);
// Ausgabefunktion
void Render(void);
// Fehlermeldung erzeugen
BOOL Error(char* msg);
// Das Fensterhandle
HWND hWnd = 0;
// Zeiger auf das DirectDraw Interface
LPDIRECTDRAW7 lpDD7 = NULL;
LPDIRECTDRAWSURFACE7 lpDDSPrimary = NULL;
|
Die Fehlerangaben in Kapitel 17 sind:
DDGDI.CPP
D:\Daten\JLI Beispiele\Kapitel_17\DDGDI\DDGDI.CPP(44) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'lpDD7'
D:\Daten\JLI Beispiele\Kapitel_17\DDGDI\DDGDI.CPP(44) : error C2501: 'LPDIRECTDRAW7' : Fehlende Speicherklasse oder Typbezeichner
D:\Daten\JLI Beispiele\Kapitel_17\DDGDI\DDGDI.CPP(44) : fatal error C1004: Unerwartetes Dateiende gefunden
Fehler beim Ausführen von cl.exe.
Auch bei folgenden Programmen gibt es Fehler, z.B. in Kapitel 20:
ManagerMain.cpp
d:\daten\jli beispiele\kapitel_20\directinputclass\inputmanager.h(36) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'lpDI'
d:\daten\jli beispiele\kapitel_20\directinputclass\inputmanager.h(36) : error C2501: 'LPDIRECTINPUT8' : Fehlende Speicherklasse oder Typbezeichner
d:\daten\jli beispiele\kapitel_20\directinputclass\inputmanager.h(36) : error C2501: 'lpDI' : Fehlende Speicherklasse oder Typbezeichner
d:\daten\jli beispiele\kapitel_20\directinputclass\inputmanager.h(39) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'lpDIDevice'
d:\daten\jli beispiele\kapitel_20\directinputclass\inputmanager.h(39) : error C2501: 'LPDIRECTINPUTDEVICE8' : Fehlende Speicherklasse oder Typbezeichner
d:\daten\jli beispiele\kapitel_20\directinputclass\inputmanager.h(39) : error C2501: 'lpDIDevice' : Fehlende Speicherklasse oder Typbezeichner
d:\daten\jli beispiele\kapitel_20\directinputclass\global.h(12) : error C2065: 'LPDIRECTDRAWSURFACE7' : nichtdeklarierter Bezeichner
d:\daten\jli beispiele\kapitel_20\directinputclass\global.h(12) : error C2146: Syntaxfehler : Fehlendes ')' vor Bezeichner 'lpDDSurface'
d:\daten\jli beispiele\kapitel_20\directinputclass\global.h(12) : error C2182: 'DeterminePixelFormat' : Ungueltige Verwendung des Typs 'void'
d:\daten\jli beispiele\kapitel_20\directinputclass\global.h(12) : error C2059: Syntaxfehler : ')'
Fehler beim Ausführen von cl.exe.
ManagerMain.obj - 10 Fehler, 0 Warnung(en)
Offensichtlich hat das mit Bezeichnern LP... zu tun.
Die CD, die ich benutze, ist schon etwas alt , sie ist aus einem jli-Buch mit Copyright 2001.
Was kann da schief sein?http://www.jliforum.de/board/images/smiles/icon_cry.gif
Crying or Very sad
Vielen Dank für Eure Mühe
Fossil _________________ Weissjurabeta |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.04.2008, 14:39 Titel: |
|
|
Hast du in deiner IDE die Pfade wie beschrieben eingestellt?
Es sieht ganz so aus, als seien hier die verwendeten DirectX-Klassen unbekannt. Schau mal in dem Kapitel, in dem DirectX zum ersten Mal angesprochen wird, da steht wie die Pfade auszusehen haben. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Fossil Mini JLI'ler
Alter: 89 Anmeldedatum: 07.03.2006 Beiträge: 11 Wohnort: Tübingen Medaillen: Keine
|
Verfasst am: 12.04.2008, 10:01 Titel: Fehlermeldung beim Übersetzen der Programme des Kapitels 17 |
|
|
An alle:
In der Verzweiflung schmeißt man alles 'runter. So habe ich alles deinstalliert und dann neu installiert. Die Programme ab Kapitel 17 laufen dennoch auch direkt nach der Installation nicht. Dann habe ich nochmals alles deinstalliert und ein Visual C++ 6 aus einem anderen Buch installiert, DxSdk8a und die Beispiele installiert, und wieder geht nichts. Ich bin in der Zwischenzeit der Meinung, daß die Autorenversion, die man mit den jli-Büchern von Markt&Technik bekommt, irgend ein Element nicht enthält, das man braucht, wenn man Windows-Spielprogramme mit DirectDraw laufen lassen will.
Wer kann mir dazu was sagen?
Thanks to the Lord of Programing for his remarks, I will keep them in Mind.
Euer Fossil _________________ Weissjurabeta |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 12.04.2008, 10:44 Titel: |
|
|
Hallo Fossil,
ich kann mir nicht vorstellen, dass es an der Visual C++ Autorenedition liegt. Damit hätten sonst sehr viel mehr Leute Probleme gehabt.
Anhand der Fehlermeldungen würde ich auch sagen, dass die Header nicht gefunden werden. Hast du die Pfade denn in Visual C++ 6 angegeben?
Christian |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.04.2008, 11:31 Titel: |
|
|
Ein weiteres Problem, was du vielleicht danach haben wirst (wenn du das neue SDK benutzt) ist eine Fehlermeldung bei DrawText.
Anstatt 5 Parametern werden jetzt 6 gebraucht. Siehe DrawText bei MSDN.
Also das hier
CPP: | m_lpD3DFont->DrawText(Text, -1, &r, DT_CALCRECT, TextColor); |
durch das hier ersetzen
CPP: | m_lpD3DFont->DrawText(m_lpD3DSprite, Text, -1, &r,DT_CALCRECT, TextColor); |
Außerdem muss vorher ein Sprite-Objekt erstellt werden (m_lpD3DSprite).
Also diese am besten passend irgendwo als globale Variable hinzufügen oder in der Klasse. In diesem Beispiel wäre das in Direct3D.h so.
CPP: | // Direct3D Variablen
LPDIRECT3D9 m_lpD3D;
LPDIRECT3DDEVICE9 m_lpD3DDevice;
LPD3DXFONT m_lpD3DFont;
LPD3DXSPRITE m_lpD3DSprite; |
Und dann an passender Stelle initialisieren.
CPP: | D3DXCreateSprite(m_lpD3DDevice, &m_lpD3DSprite); |
In diesem Fall in BOOL CDirect3D::Init(HWND hWnd, BOOL bWindowed) nachdem das Device angelegt wurde.
P.s Eine Sache hat sich noch geändert bei D3DXCreateFontIndirect.
Und zwar wird statt LOGFONT, D3DXFONT_DESC benutzt. http://msdn2.microsoft.com/en-us/library/bb172843(VS.85).aspx |
|
Nach oben |
|
|
Fossil Mini JLI'ler
Alter: 89 Anmeldedatum: 07.03.2006 Beiträge: 11 Wohnort: Tübingen Medaillen: Keine
|
Verfasst am: 16.04.2008, 08:09 Titel: Fehlermeldung beim Übersetzen der Programme des Kapitels 17 |
|
|
Lieber Christian Rouselle,
Kann es sein, dass mein Problem daher kommt, dass ich zwei Versionen von DirectX auf meinem Computer habe, eine im Windows XP (Version 9.0 c) und eine von der Buch CD (Version ?
Die Beispiel-Programme laufen nämlich, wenn ich sie z.B. von C:\Programme\JLIBeispiele\Kapitel_19\TestSprite\TestSprite (.exe) durch Doppelklick starte.
Die Beispiel-Programme laufen nicht, wenn ich sie von einer Verknüpfung, die ich von C++ (über Start - Programme-Microsoft Visula 6.0 - Microsoft Visual 6.0) angelegt habe, kompilieren, linken und starten will.
Wenn das die Lösung sein sollte, wie bekomme ich dann eine Verknüpfung von DirectX 8 auf den Desktop?
Vielen Dank fürs Nachdenken
Dein Fossil _________________ Weissjurabeta |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 16.04.2008, 13:03 Titel: |
|
|
Wenn du die Beispiele aus der IDE heraus startest, könntest du ein anderes Startverzeichnis eingestellt haben, womit die Programme sämtliche Dateien nicht finden können.
Überprüfe in deiner IDE in welchem Verzeichnis du die Anwendungen nach dem Kompilieren startest. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 16.04.2008, 21:31 Titel: Re: Fehlermeldung beim Übersetzen der Programme des Kapitels |
|
|
Fossil hat Folgendes geschrieben: | Die Beispiel-Programme laufen nicht, wenn ich sie von einer Verknüpfung, die ich von C++ (über Start - Programme-Microsoft Visula 6.0 - Microsoft Visual 6.0) angelegt habe, kompilieren, linken und starten will. |
Was meinst du hiermit? Eine Verknüpfung fürs kompilieren, linken und starten? Sowas kenne ich nicht und weiß nicht wie das funktionieren soll.
Wie Christian schon sagte deuten deine Fehlermeldungen auf fehlende Headerinformationen hin. Versichere dich, dass du in den Optionen der Entwicklungsumgebung(Visual C++) die Pfade zu den DirectX Headern gesetzt hast (sollten ganz oben in der entsprechenden Liste stehen). Ist aber auch nochmal im Buch beschrieben denke ich... |
|
Nach oben |
|
|
Fossil Mini JLI'ler
Alter: 89 Anmeldedatum: 07.03.2006 Beiträge: 11 Wohnort: Tübingen Medaillen: Keine
|
Verfasst am: 17.04.2008, 07:01 Titel: |
|
|
Hallo KI,
mit Verknüpfung meinte ich, daß ich eine Verknüpfung zu C++ auf den Desktop gelegt habe dadurch, daß ich über Start - Programme - Microsoft Visual C++ 6.0 das Icon auf den Desktop gezogen habe, um das C++ Programm aufzurufen und dann dort zu programmieren. Das geht auch. Wenn ich dann (als Beispiel) Kapitel 19 aufrufe und kompilieren will, dann - Streik!
Das Buch von Christian Rouselle, das ich habe, hat ein Copyright von 2001. Ich werde nochmals danach suchen, wo man Pfade einstellen kann. Ich dachte, es genüge, zu einfach installieren, an den vorgeschlagenen Pfaden nichts zu ändern und die Beispiele laufen zu lassen.
Eure Diagnose, daß das Problem mit den Headern zu tun hat, ist sicherlich richtig. Ich bekomme z.B. bei Kapitel 19 First Sprite eine Fehlermeldung in der <global.h> Compilierung
C:\Programme\JLI Beispiele\Kapitel_19\FirstSprite\global.h kann nicht kompiliert werden; die Dateierweiterung ist keinem Kompilierungstool zugeordnet.
Was aber tun?
Veilleicht bin ich manchmal blöd, im Spiegel sehe ich so aus.
Gruß Fossil _________________ Weissjurabeta |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 17.04.2008, 10:49 Titel: |
|
|
Ein paar Sachen sind mir noch unklar. Welches Buch hast du genau (es gibt verschiedene Auflagen mit leicht abgeänderten Namen und anderem Inhalt: Entwicklungsumgebung...)
Ich habe hier nur "jetzt lerne ich - DirectX9 und Visual C++". Du hast von DirectX 8 gesprochen. Also hast du vermutlich den Vorgänger?
In dem Buch was ich hier habe gibt es am Anfang von Kapitel 17 einen Abschnitt "Installation von DirectX", wo auch genau erklärt wird wo man die Pfade zu den DirectX-Headern und Libraries setzen muss.
(Neuere DirectX-SDKs machen das automatisch, aber neuere SDKs unterstützen kein Visual C++ 6.0 mehr soweit ich weiß...)
Wie auch immer: Die Pfade sollten dort zu finden sein:
Starte Visual C++
Gehe ins Menü auf Extras->Optionen
Im folgenden Fenster dann auf das Register Verzeichnisse klicken
Uns interessieren "Verzeichnisse anzeigen für" "Include-Dateien"
So. Da müsste jetzt was von DirectX stehen? Ist das so? Nicht aufgeben... ansonsten müssen wir uns was anderes überlegen. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|