DirectX - 按ctrl + alt + del时出错

时间:2013-05-01 21:11:12

标签: c++ directx

到目前为止,我的计划运作良好。不幸的是,当我按 ctrl + alt + del 时会抛出错误。现在我已经阅读了这个问题:

E_ACCESSDENED when using ctrl alt del

其中提到计算机切换到不同的屏幕(您没有任何写入权限)。只是我不知道如果我在当前屏幕上有写权限,如何追踪。

我的代码如下:

void D3D::StartFrame() {
    HRESULT result;

    result = pDevice->Clear( 0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(FRAME_BG_R,FRAME_BG_G,FRAME_BG_B),0.0f,0 );
    assert( !FAILED( result ) );

    result = pBackBuffer->LockRect( &backRect,NULL,NULL );
    assert( !FAILED( result ) );
}

void D3D::EndFrame() {
    HRESULT result;

    result = pBackBuffer->UnlockRect();
    assert( !FAILED( result ) );

    result = pDevice->Present( NULL,NULL,NULL,NULL );
    assert( !FAILED( result ) );
}

目前我正在运行" StartFrame()"对每个帧起作用,然后执行一些应该在帧期间完成的操作。最后它将调用" EndFrame()"将解锁绘图矩形的函数。

现在发生的错误来自最后一个断言(StartFrame()断言不会失败?)。我是否应该更改这些函数以返回布尔值,告诉程序是否应该继续?我应该让它停止整个程序(感觉有点奇怪)?也许我正在以错误的方式处理矩形(如果它与断言一起使用)?

错误:断言失败! - !FAILED(结果)

任何帮助/建议都会受到欢迎!

1 个答案:

答案 0 :(得分:3)

首先,无论何时出现错误,在做某事之前,甚至在考虑发生了什么之前,您都必须检查完全错误消息所说的内容。

对于DirectX 9,您不仅要检查HRESULT变量FAILED,还要从中获取详细信息。您可以使用DXGetErrorString()和/或DXGetErrorDescription()函数(dxerr.h + dxerr.lib)从中获取详细信息。例如,您可以通过编写一个小帮助函数来处理错误,该函数接受HRESULT并显示MessageBox()FAILED的详细信息。此外,还有一个很好的DXTrace()宏作为快速解决方案。或者,作为最快的延迟解决方案,您可以在函数失败后立即设置断点,并在调试监视器中检查HRESULT变量的值。

在您的情况下,因为我们在您的帖子中没有错误描述,我们只能猜测发生了什么(这是来自SO的人最不喜欢的)。我怀疑这里是Device Lost州。当您的应用失去焦点时,有时会出现这种状态(Alt + tab,Ctrl + Alt + Del等)。为防止崩溃,您必须处理MSDNthis short tutorial中所述的异常状态。

当然,我的猜测在这里可能是错的,因为我不知道究竟发生了什么。请添加适当的错误处理并提供其他信息以获得具体帮助。

快乐的编码!