Hallo,
seit kurzem habe ich mich mal wieder mit DirectX beschäftigt und damit angefangen, die Hauptbestandteile einer entsprechenden Win32-Anwendung in Klassen zu kapseln. Bisher habe ich nur ein Fenster geöffnet und Direct3D initialisiert. Es läuft auch soweit problemlos, wenn ich allerdings zum Testen meiner Fehlerbehandlung absichtlich eine Exception aus einer Methode meiner Direct3D-Klasse werfe, wird nicht wie erwartet eine MessageBox mit der Fehlerbeschreibung geöffnet, sondern Visual Studio 2010 gibt "
Eine Ausnahme (erste Chance) bei 0x7c812afb in Direct3D.exe: Microsoft C++-Ausnahme: Exception an Speicherposition 0x0012fbd0." aus
Mein Hauptprogramm sieht so aus:
|
C-/C++-Quelltext
|
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
|
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, PSTR cmdLine, int cmdShow)
{
DEBUG_STACK;
// Name der Anwendung
const tstring title(TEXT("Direct3D"));
try
{
Window w(hInstance, title);
Direct3D d3d(w, 640, 480, true);
while(w.processEvents())
{
d3d.beginScene();
d3d.endScene();
d3d.present();
}
}
catch(const Exception& e)
{
MessageBox(NULL, e.what().c_str(), title.c_str(), MB_OK | MB_ICONERROR);
}
return 0;
}
|
Bevor ich hier noch mehr Code hineinkopiere: Ich habe bereits einen Breakpoint auf Zeile 22 gesetzt und die Stelle wird auch erreicht. Drücke ich dann F10 höre ich sogar den Error-Sound (wenn ich das MB_ICONERROR entferne tritt dieser nicht auf, er muss also von der MessageBox stammen), die MessageBox ist jedoch nicht sichtbar. Das Programm läuft anschließend sogar ganz normal weiter bis zum return 0; und beendet sich (scheinbar) problemlos. In VS 2010 taucht dann aber wie gesagt anschließend die genannte Meldung in der Ausgabe auf.
Eine weitere Beobachtung konnte ich bereits machen: Wenn ich im Destruktor der Window-Klasse das DestroyWindow() auskommentiere, wird die MessageBox normal angezeigt (obwohl diese doch mit meinem Hauptfenster eigentlich gar nichts zu tun hat), die Meldung erscheint nach Beendigung des Programms aber trotzdem.
Vielleicht könnt ihr mir ja weiterhelfen. Falls ihr gezielt weitere Codestellen benötigt, reiche ich diese gerne nach. Ich wollte nur nicht gleich das ganze Projekt posten, damit es hier zu nicht unübersichtlich wird