2. Programm und gleich wieder ein schöner Fehler -.-
-
Hallo zusammen,
nachdem ihr mir ja gestern hierbei wirklich schnell und zahlreich geholfen habt, muss ich gleich nochmal eine Frage stellen (obwohl ich eigentlich vorhatte, sowas alleine zu lösen
).
Es geht auch schon um den zweiten Teil im Tutorial, bei dem der Quellcode exakt der gleiche bleibt, bis auf kleine Änderungen die dazu dienen sollen, das Fenster im Vollbildmodus zu starten...
Wenn ich das Programm jetzt kompiliere läuft alles wie geschmiert, kein Fehler, keine Warnung, alles in Ordnung. Beim starten schmeißt mich aber das Programm mit folgender Fehlermeldung raus
[Inhalt der Messagebox]Unbehandelte Ausnahme bei 0x00f618c8 in Direct3D Fullscreen.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Beim schrittweisen durchdebuggen des Codes bin ich dann auf folgende Stelle gestoßen:
void render_frame(void) { d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0);/*<-Hier schmeißt er mich raus!*/ d3ddev->BeginScene(); //do 3D rendering on the back buffer here d3ddev->EndScene(); d3ddev->Present(NULL, NULL, NULL, NULL); return; }
Wie gesagt, eigentlich habe ich mir vorgenommen nicht gleich wegen jedem Mist nen Thread im Forum zu eröffnen, aber ich stehe noch total am Anfang und ich denke mir dass Probleme wie mein jetziges, bzw. das gestrige weniger mit meiner Unkenntnis was DX betrifft auftreten, sondern eher allgemeine Sachen sind, die man einmal abklärt und sich dann für den Rest seiner Tage merkt
Also über Hilfe wäre ich sehr dankbar,
vielen Dank im Voraus!
-
Zeig doch mal den Codeausschnitt der Direct3D initialisiert und d3ddev setzt.
-
LPDIRECT3DDEVICE9 d3ddev; [...] void initD3D(HWND hWnd) { d3d = Direct3DCreate9(D3D_SDK_VERSION); //create the Direct3D interface D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = FALSE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow = hWnd; d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; d3dpp.BackBufferWidth = SCREEN_WIDTH; d3dpp.BackBufferHeight = SCREEN_HEIGHT; //create a device class using this information and the info from the d3dpp stuct d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &d3ddev); return; }
-
Du musst _immer_ die Rückgabewerte der Funktionen überprüfen. Direct3D schmeisst leider keine Exceptions, sondern zeigt Fehler nur über die Rückgabewerte an. Dann weisst du auch, wann dein Fehler passiert und kannst den Funktionsaufruf im Debugger genauer untersuchen. Schlag dabei in der DirectX-Doku nach, warum der Funktionsaufruf fehlschlagen kann und überprüfe kritische Parameter auf ihre Gültigkeit.
Gruß
Don06
-
sorry ist Falsch hier.