6

最近、 (Windows XP)からVS 2005にアップグレードしました。VS 2008プロジェクトの1つで使用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)
   {}
 }

VS 2008以前は とうまく機能していたので、これは と関係がありVS 2005ますか?

4

3 に答える 3

9

このフォーラムの投稿で役立つ情報を見つけました。VB に関連するそのフォーラムの質問に注意してください。ただし、これはまだ良い情報です。サイモン・オコナーの全功績。

再フォーマットして少し編集しました。

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 に付属のコマンド ライン デバッグ ビューアを使用します。

于 2010-06-29T05:44:16.170 に答える
2

これは通常、すべてのリソース (頂点バッファー、テクスチャなど) を破棄しなかった場合に発生します。

于 2012-10-15T17:23:02.140 に答える
0
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) {} 
}
于 2013-07-12T15:07:04.357 に答える