|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 21.03.2003, 13:11 Titel: Fehlermeldung beim Schließen |
|
|
Hi Leute,
Ich hab n Programm geschrieben, bei dem immer beim Beenden eine Fehlermeldung auftritt:
Zitat: | Diese Anwendung wird aufgrund eines ungültigen Vorgangs geschlossen. |
Wenn ich dann auf Debug klicke springt der Debugger an die Stelle, an der der Hintergrundbuffer gelöscht und mit einer Farbe gefüllt wird. Und es kommt folgende Fehlermeldung:
Zitat: | Unbehandelte Ausnahme in Programm.exe:
0xC0000005: Access Violation. |
Hier ein paar Auszüge aus dem Programm. Vielleicht könnt ihr mir helfen:
Code: | while(TRUE)
{
if (PeekMessage(&Nachricht,NULL,0,0,PM_REMOVE))
{
if (Nachricht.message == WM_QUIT) break;
// Nachricht an die Callbackfunktion senden
TranslateMessage(&Nachricht);
DispatchMessage(&Nachricht);
}
else
{
//sontiges
}
} |
Code: | case WM_PAINT:
DevCon=GetDC(hHauptfenster);
PAINTSTRUCT ps;
BeginPaint(hHauptfenster,&ps);
Painting(DevCon);
EndPaint(hHauptfenster,&ps);
return 0;
break; |
Code: | void DirectDrawClass::Clear(int Farbe)
{
DDBLTFX BlitFX;
ZeroMemory(&BlitFX,0);
BlitFX.dwSize = sizeof(BlitFX);
// Hintergrundfarbe setzen
BlitFX.dwFillColor = Farbe;//Color;
// Puffer löschen
//----->Hier springt der Cursor beim Debuggen hin<-----
DDHinterBuffer->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&BlitFX);
} |
_________________ 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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 21.03.2003, 13:51 Titel: |
|
|
Hallo,
teste doch mal ob die Adresse, die in DDHinterBuffer steht gültig ist.
Z.B. mit 0 initialisieren und dann nach dem Anlegen des Buffers gucken, ob noch 0 drinsteht und was der Rückgabewert der Funktion ist, usw.
Christian |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 21.03.2003, 15:40 Titel: |
|
|
DDHinterBuffer wird bereits im Konstruktor der DD-Klasse mit NULL initialisiert. Nach "GetAttachedSurface" wird geprüft, ob der Hintergrundbuffer tatsächlich angelegt werden konnte.
Wenn nicht wird
- eine Fehlermeldung ausgegeben
- in eine Logdatei, die alle Initialisierungen Dokumentiert, geschrieben, dass die Funktion fehlgeschlagen ist.
Code: | //Log-Eintrag GetAttachedSurface
LogEintrag("008 GetAttachedSurface: ");
// Hintergrundpuffer anlegen
if(FAILED(DDPrimaereOberflaeche->GetAttachedSurface(&ddsd.ddsCaps,&DDHinterBuffer)))
{
Error("Fehler beim Anlegen des Buffers");
LogTF(FALSE);
//return FALSE;
}
else LogTF(TRUE);
|
Beides ist nicht der Fall:
Es tritt nur die oben genannte Fehlermeldung auf ^^.
Die Logdatei enthält den Eintrag: Zitat: | 008 GetAttachedSurface: erfolgreich |
Außerdem, das Zeichnen geht ja. Es wird alles schön in den Hintergrundbuffer geschrieben und dann geflippt.
Und die Initialisierung des Buffers unterscheidet sich nicht von der anderer Spiele, die Funktionieren. _________________ 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 |
|
|
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 21.03.2003, 16:31 Titel: |
|
|
Hi,
debugge dein Programm doch mal von Anfang an bis du dann an die Stelle kommst, wo es sich aufhängt. Auf diese Weise solltest du wohl die Stelle finden an der mit einer Variable gearbeitet wurd, welche auf NULL zeigt. Ich weiß ja nicht, ob du Datei-Arbeit mit drin hast, aber fclose(...) kann zu abstürzen dieser Art führen, wenn der Zeiger auf die Datei NULL ist.
Gruss Tarek |
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 22.03.2003, 19:42 Titel: |
|
|
Die Tatsache, dass der Fehler beim Schließen des Programms auftritt, lässt mich vermuten, dass DDHinterBuffer Released und auf NULL gesetzt, danach aber nochmal Clear() aufgerufen ist.
Setz doch mal nen Breakpoint auf die Stelle, wo du DDHinterBuffer auf NULL setzt, bzw. SAFE_RELEASE(DDHinterBuffer) aufrufst, und falls das Programm dort anhält, bevor es in Clear() abstürzt, denke ich, dass oben geschilderter Fehler zutrifft.
Jörg _________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 22.03.2003, 23:43 Titel: |
|
|
das Problem hatte ich vor kurzen noch , bei mir lag es daran das ich am schluss directdraw e.t.c. nicht wieder aufgereumt hatte...
also
Code: | if (lpDI != NULL)
{
lpDI->Release();
lpDI = NULL;
}
|
e.t.c |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 23.03.2003, 11:36 Titel: |
|
|
Wenn ich das Programm durchkompilier dann komm ich irgendwann mal zu einer Fehlermeldung:
Zitat: | Verfolgen innerhalb eines DLL Systems nicht erlaubt |
Primäreoberfläche und Objektzeiger werden erfolgreich released.
@Jörg: muss man den Hintergrundbuffer überhaupt auf null setzen und releasen So weit ich weiß, stand davon nix in Christians Buch. _________________ 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 |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 23.03.2003, 11:55 Titel: |
|
|
Das mit dem Releasen steht auf Seite 297. Achte auf die Reihenfolge, in der du die Sachen released! _________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 23.03.2003, 14:45 Titel: |
|
|
Zitat: | Da das DirectDraw-Objekt, der Clipper oder auch die primäre Oberfläche COM-Objekte sind, müssen diese wieder freigegeben werden, wenn die Anwendung beendet wird. Dazu muss die Methode Release des jeweiligen Objekts aufgerufen werden.
Für die Freigabe der DirectDraw-Objekte schreiben wir eine Funktion, die folgendermaßen aussieht:
Code: | // die Objekte freigeben
void CleanupDirectDraw(void)
{
//Prüfen, ob die Zeiger gültig sind
if(NULL!=lpDDSPrimary)
{
lpDDSPrimary->Release();
lpDDSPrimary=NULL;
}
if(NULL!=lpDDClipper)
{
lpDDClipper->Release();
lpDDClipper=NULL;
}
if(NULL!=lpDD7)
{
lpDD7->Release();
lpDD7=NULL;
}
} |
|
Wo is n hier bitte der Hintergrundbuffer???
Ich habs glaub ich scho bei anderen Spielen probiert mit
Code: | DDHinterbuffer->Release(); |
aber da gabs nur Fehlermeldungen. _________________ 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 |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 23.03.2003, 15:27 Titel: |
|
|
Oh, du hast recht. Tut mir leid, da hab ich mich vertan.
Aber prüf doch mal, ob Clear() aufgerufen wird, nachdem DirectDraw schon released wurde. _________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 28.03.2003, 17:14 Titel: |
|
|
Ich werd mal alle eure Möglichkeiten ausprobieren.
Zur Zeit hab ich einfach viel mit meinem Fantasy-RPG zu tun.
Wenns Probleme gibt, meld ich mich _________________ 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 |
|
|
|
|
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
|