2010-08-06 110 views
1

我剛剛開始學習如何在C++中編寫DirectX 9應用程序,所以我仍然不是很好,而且我正在搞亂它。DirectX 9 C++程序崩潰並且不會重新打開

當我在程序崩潰後重新打開程序時,D3D設備無法創建,結果爲D3DERR_INVALIDCALL。我正在用MinGW中的G ++編譯,使用DirectX 2009年的SDK。我猜這是因爲我沒有發佈所有的設備和紋理等崩潰時,它仍然認爲我使用它們。它在重新啓動時重新打開。有人能夠指出我如何排序「重置」DirectX的正確方向嗎?

這裏是我用什麼來創建設備:

D3D = Direct3DCreate9(D3D_SDK_VERSION); 

D3DPRESENT_PARAMETERS D3DPP; 
ZeroMemory(&D3DPP, sizeof(D3DPP)); 
D3DPP.Windowed = TRUE; 
D3DPP.SwapEffect = D3DSWAPEFFECT_DISCARD; 
D3DPP.hDeviceWindow = hWnd; 
D3DPP.BackBufferFormat = D3DFMT_X8R8G8B8; 
D3DPP.BackBufferWidth = WIDTH; 
D3DPP.BackBufferHeight = HEIGHT; 
D3DDevice = 0; //Null pointer to make sure I can check it 
HRESULT hr = D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, 
hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &D3DPP, &D3DDevice); 

if (!D3DDevice) { 
    MessageBox(NULL,"Device could not be created","error",0); 
    switch (hr) { 
    case D3DERR_DEVICELOST: 
    MessageBox(NULL,"1","error",0); 
    break; 
    case D3DERR_INVALIDCALL: 
    MessageBox(NULL,"2","error",0); 
    break; 
    case D3DERR_NOTAVAILABLE: 
    MessageBox(NULL,"3","error",0); 
    break; 
    case D3DERR_OUTOFVIDEOMEMORY: 
    MessageBox(NULL,"4","error",0); 
    break; 
    }; 
    return 1; 
}; 
return 0; 
+0

給我們一些代碼看看,我們可能會幫助... – 2010-08-06 11:07:48

回答

0

似乎在MsgProc中的某個東西導致該窗口失敗的設備,我的程序崩潰。不管怎麼說,還是要謝謝你。

0

好吧,我不得不問。在撥打電話之前,您是否有有效 hWnd?

確保它是有效的,好事情可能發生。 :-)

+0

當然,hWnd存在。正如我所說的那樣,它只有一次,當我在「遇到問題」後再次打開它時,它不會工作。 – AStupidNoob 2010-08-07 00:36:09

+0

然後hWnd是_still_有效嗎? – JustBoo 2010-08-07 13:41:40