10

作成した SharpDX プログラムで奇妙なエラーが発生します。

プログラムにはMainForm、から継承する1つのフォームが含まれていますSharpDX.Windows.RenderForm(私はDirect3D 9をやっています)。を呼び出してプログラムを強制終了するロジックがいくつかMainForm.Close()あり、完全に機能します。

ただし、X ボタンでフォームを閉じるか、画面の左上隅をダブルクリックしてフォームを閉じると、プログラムはコード -1073610751 (0xc0020001) で終了します。

これは、プログラムが終了しているときにのみ発生するため、比較的小さな煩わしさです。実際には終了しているため、エラーで終了しても問題ありません。

ただし、このエラーは、の最後の行にブレークポイントを設定すると発生しませんMain()。そうしてから、説明したようにウィンドウを閉じると、ブレークポイントにヒットし、再開するとプログラムがコード 0 で終了します。

SharpDX と 1 つの純粋な C DLL を除いて、一部のデータをワンショット処理するために呼び出しています。混合コードやその他の奇妙なことは行っていません。

私は周りを見回しましたが、このコードは文字列バインディングに関連しているように見えますか? 他の人は、奇妙な C++/CLI の混合作業を行うときにこの問題を抱えているようですが、私はそのようなことはしていません。

何か案は?少なくとも、このエラー コードに関するより簡潔な情報を取得する方法について教えてください。

4

1 に答える 1

9

これは非常に低レベルの RPC エラーです。プログラムで使用される可能性が高いのは、COM が実行される基盤となるプロトコルです。候補はたくさんありますが、SharpDX 自体は COM 相互運用レイヤーを使用して DirectX 呼び出しを行います。また、DirectX 自体がビデオ ドライバーに対してこの種の呼び出しを行う可能性が非常に高くなります。

これは、シャットダウン順序の問題が発生した場合にトリガーされると予想される種類のエラー コードでもあります。すでにリリースされた後に COM インターフェイスを使用するようなものです。プログラムを正常にシャットダウンすることは、特にスレッドが多数ある場合、解決が困難な問題になる可能性があります。どの DirectX アプリにもあります。また、そのような問題が既知であり、誰かのバグ データベースに記録されている場合でも、そのような問題を無視するのは非常に簡単です。あなたが指摘したように、それ以外の場合、プログラムは厄介な例外なしに問題なくシャットダウンするためです。RPC はすでにそれが爆発するのを防いでいます。生成されたエラー コードが表示されています。

この問題について自分でできることはほとんどありません。これはあなたが書いたのではないコードであり、書いたプログラマーを見つけることはできません。[出力] ウィンドウに初回例外通知が表示された場合は、アンマネージ デバッガーを有効にし、[デバッグ] + [例外] を使用して、Win32 例外の [スロー] チェックボックスをオンにし、Microsoft Symbol サーバーを有効にすると、例外が発生したときにスタック トレースを取得できます。投げられます。これは、参照するソースのないネイティブ コードの腸内にあることに注意してください。しかし、問題の原因となっている DLL を突き止めることができます。そのDLLを修正するためにできることはまだありません。最も一般的な問題の原因であるビデオ ドライバーの更新をお勧めします。それはあなたがそれを取ることができる限りです。

于 2013-08-07T11:15:34.367 に答える