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 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何取消开机按ctrl+alt+delete组合键

Windows server开机登录取消按ctrl+alt+delete组合键

Bash快捷操作

PS常用快捷键整理

ubuntu字符终端和图形界面切换

centos7 取消Ctrl+Alt+Del重启功能