gpt4 book ai didi

c++ - DirectX - 按 ctrl + alt + del 时出错

转载 作者:行者123 更新时间:2023-11-30 02:55:34 24 4
gpt4 key购买 nike

到目前为止,我的程序运行良好。不幸的是,当我按下 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() 断言没有失败?)。我是否应该更改这些函数以返回 bool 值来告诉程序是否应该继续?我应该让它停止整个程序吗(感觉有点奇怪)?也许我正在以错误的方式处理矩形锁定(它应该与断言一起使用)吗?

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

我们将不胜感激任何帮助/建议!

最佳答案

首先,无论何时遇到错误,在做某事之前,甚至在思考发生了什么之前,您都必须检查确切错误消息的内容。

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

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

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

编码愉快!

关于c++ - DirectX - 按 ctrl + alt + del 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16326583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com