【问题标题】:DirectX program throw an exception when it is destroyed under window modeDirectX程序在窗口模式下被销毁时抛出异常
【发布时间】:2013-03-27 19:36:20
【问题描述】:

当我尝试使用 Rastertek DirectX 11 教程之一时出现问题。

  • 我把const bool fullscreen value改成了false,这样程序就可以在窗口模式下运行了
  • 我将窗口样式从CLIPPINGWINDOW 更改为OVERLAPPEDWINDOW

它工作正常,只是程序在窗口被销毁时抛出异常:

Unhandled exception at 0x779715ee in FrustumCulling.exe: 0xC0000005: Access violation reading location 0xfeeeff5e.

教程 16,http://www.rastertek.com/dx11tut16.html

我所做的唯一修改是:

graphicsclass.h

const bool FULL_SCREEN = true //false;

SystemClass::InitializeWindows
{

...

m_hwnd = CreateWindowEx(WS_EX_APPWINDOW, m_applicationName, m_applicationName, 
            WS_OVERLAPPEDWINDOW,
            posX, posY, screenWidth, screenHeight, NULL, NULL, m_hinstance, NULL);

...

}

【问题讨论】:

  • 需要更多详细信息,例如您正在学习哪个教程,如来自rastertek 的教程编号。
  • 这个错误发生在哪一行?可能是您尝试使用已发布的 com 对象(例如在清理方法中)?
  • 在 swapChain->Release();发生此错误的行。
  • 你的代码真的有“const bool FULL_SCREEN = true //false;”吗?因为这不会编译,因为您已经注释掉了终止分号,除非它与下一行组合成一个有效的语句(这可能会破坏很多)。我认为这更可能不是您将线路更改为的字面意思,而是认为我会提到它以防万一......

标签: c++ directx directx-11


【解决方案1】:

您是否仍然在全屏模式下设置交换链? 当我遇到这个问题时,将它添加到我的 DxClass 的析构函数中解决了它

if(_swapChain != nullptr)
{
            _swapChain->SetFullscreenState(false, NULL);  
            _swapChain->Release();
            _swapChain = nullptr;
}

根据其中一个教程中的 Rastertek cmets 之一,交换链必须在发布之前将全屏设置为 false。

当您设置 DXGI_SWAP_CHAIN_DESC 时,请确保您使用的是 swapChainDesc.Windowed = !FULL_SCREEN 而不是文字布尔值,并确保您将 FULL_SCREEN 设置为 false,FULL_SCREEN = true //false; 不会这样做,也不应该编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多