SlimDX Device.Reset崩溃,出现"D3DERR_INVALIDCALL:无效呼叫(-2005530516)"错误

aba*_*eel 5 .net c# directx slimdx

我们最近升级VS 2005VS 2008(Windows XP).我们SlimDx在其中一个项目中使用.升级后一切正常,除了我的恢复功能,它会在devicelost/device reset上调用

D3DERR_INVALIDCALL:无效通话(-2005530516)

我使用Ctrl- Alt- Del然后Escape模拟设备丢失.

void Recover()
{
  try
     {
         if (res.Code == D3DERR_DEVICENOTRESET)
         { 
           res = m_device.Reset(m_presentParams); //Crashes on this.
           if (res.IsSuccess)
           {
             m_deviceLost = false; 
            }
          }
     }
   catch(Exception e)
   {}
 }
Run Code Online (Sandbox Code Playgroud)

这是否与之相关VS 2008,因为它曾经很好地与之合作VS 2005

Dre*_*kes 8

我在这个论坛帖子中找到了一些有用的信息.请注意该论坛上与VB相关的问题,但这仍然是一个很好的信息.完全归功于Simon O'Connor.

重新格式化并稍微编辑.

INVALIDCALL通常表示您传递给D3D的参数无效或您无法执行的操作.

找出D3D调用返回INVALIDCALL错误的原因的最简单方法是让它告诉您:

  1. 确保您正在使用安装了D3D运行时的DEBUG版本(安装SDK时您已获得选项).
  2. 确保已启用运行时的DEBUG版本.转到控制面板中的DirectX小程序,然后在Direct3D选项卡下查看.
  3. 在DirectX控制面板小程序中,将Direct3D的调试输出级别提高到最大值.我已经使用Visual BASIC超过10年了,所以我忘记了可用的调试支持,我没有在这台机器上安装它来检查......如果VB有一个调试输出窗口:
  4. 运行程序并使其失败并显示INVALIDCALL错误.
  5. 现在查看调试输出窗口中的所有文本.D3D将记录信息,警告以及重要的错误.它还解释了为什么D3D呼叫失败的原因.

如果VB没有简单的调试输出窗口,请从http://www.sysinternals.com下载并运行DebugView,或使用DirectX SDK附带的命令行调试查看器

  • @SigTerm,是的,得到了​​.就我而言,它与stateblocks无关.这是一个通用的错误消息,但这个SO帖子对于错误代码有很高的谷歌排名,所以我提出了这个答案,希望它可以帮助其他人通过搜索进入. (4认同)