DirectX - 按 ctrl + alt + del 时出错
Posted
技术标签:
【中文标题】DirectX - 按 ctrl + alt + del 时出错【英文标题】:DirectX - Error when pressing ctrl + alt + del 【发布时间】:2013-05-01 21:11:11 【问题描述】:到目前为止,我的程序运行良好。不幸的是,当我按 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】:首先,每当你遇到错误时,在做某事之前,甚至在考虑发生了什么之前,你必须检查究竟错误信息说的是什么。
对于 DirectX 9,您不仅要检查 HRESULT
变量 FAILED
是否,还要从中获取详细信息。您可以使用DXGetErrorString()
和/或DXGetErrorDescription()
函数(dxerr.h
+ dxerr.lib
)从中获取详细信息。例如,您可以通过编写一个小的帮助函数来处理错误,该函数接受HRESULT
并显示MessageBox()
以及FAILED
的详细信息。此外,还有一个很好的 DXTrace()
宏作为快速解决方案。或者,作为一种最快的惰性解决方案,您可以在函数失败后立即设置断点,并在调试监视器中检查 HRESULT
变量的值。
在你的情况下,因为我们在你的帖子中没有错误描述,我们只能猜测发生了什么(这是来自 SO 的人最不喜欢的)。我怀疑这里是Device Lost
状态。当您的应用失去焦点(Alt+tab、Ctrl+Alt+Del 等)时,有时会出现这种状态。为防止崩溃,您必须按照MSDN 或this short tutorial 中的说明处理此类异常状态。
当然,我的猜测在这里可能是错误的,因为我不知道到底发生了什么。请添加适当的错误处理并提供更多信息以获得具体帮助。
编码愉快!
【讨论】:
以上是关于DirectX - 按 ctrl + alt + del 时出错的主要内容,如果未能解决你的问题,请参考以下文章