Exception Problem
-
#include <d3d9.h> #include <windows.h> #include <string> #pragma comment(lib, "d3d9.lib") using namespace std; //Prototypen LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void InitD3D(HWND hWnd); void CleanUp(); void Render(); IDirect3D9 *g_pD3D = NULL; IDirect3DDevice9 *g_pD3DDevice = NULL; //Funktionen INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrecInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName = "D3D9"; wc.lpszMenuName = NULL; RegisterClass(&wc); hWnd = CreateWindow("D3D9", "DirectX9", WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, NULL, NULL, hInstance, NULL); try { InitD3D(hWnd); ShowWindow(hWnd,iCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } catch(string& err) { MessageBox(hWnd,err.c_str(),"ERROR",MB_OK); } //UnregisterClass("D3D9",hInstance); return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_DESTROY: { CleanUp(); PostQuitMessage(0); return 0; } case WM_PAINT: { Render(); ValidateRect(hWnd, NULL); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); } void InitD3D(HWND hWnd) { if(!(g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) { throw (string) "DirectX Init Error"; } D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.BackBufferWidth = 640; d3dpp.BackBufferHeight = 481; d3dpp.BackBufferCount = 1; d3dpp.Windowed = FALSE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; HRESULT hResult = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice); switch(hResult) { case D3DERR_DEVICELOST: { throw (string) "DEVICELOST"; break; } case D3DERR_INVALIDCALL: { throw (string) "INVALIDCALL"; break; } case D3DERR_NOTAVAILABLE: { throw (string) "NOTAVAILABLE"; break; } case D3DERR_OUTOFVIDEOMEMORY: { throw (string) "OUTOFVIDEOMEMORY"; break; } } } void CleanUp() { if(g_pD3DDevice != NULL) { g_pD3DDevice->Release(); } if(g_pD3D != NULL) { g_pD3D->Release(); } } void Render() { if(NULL == g_pD3DDevice) { throw (string) "D3DDEVICE NOT AVAILABLE"; } g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0F, 0); if(SUCCEEDED(g_pD3DDevice->BeginScene())) { //Rendern der Szene Objekte g_pD3DDevice->EndScene(); } g_pD3DDevice->Present(NULL, NULL, NULL, NULL); }
Wenn ich den Code ausführe müßte er mir eigentlich ne Exception werfen (aufgrund ungültiger backbuffer auflösung), tut er aber irgendwie nicht. Ich sehe weder ne MessageBox noch sonst was, das fenster wird sofort geschlossen mit dem windows fehler sound. langsam fang ich an exceptions zu hassen.
warum funzt das hier nicht???
-
Warum debuggst du nicht einfach?
-
kannst du auch ein beispiel ohne directx anfertigen?
-
dein fehler muss woanders liegen, das hier
#include <iostream> #include <string> using namespace std; void f( ) { throw (string)"test"; } int main( ) { try { f( ); } catch( string &e ) { cout << e; } }
funktioniert einwandfrei bei mir.
versuch doch mal ein minimales abstürzendes programm zu machen.
-
throw (string) "DEVICELOST";
*Schauder* Wo um Himmelswillen lernt man sowas?
langsam fang ich an exceptions zu hassen.
Das ist immer gut. Einfach alles hassen was man nicht kennt und versteht. Funktioniert schon seit tausenden von Jahren ganz hervorragend.