1

Windows Media Player COM コントロールの複数のインスタンスを持つフォームがあります。映画をしばらく再生した後、クラッシュします。アプリケーションに問題があることを示すダイアログ ウィンドウが表示され、アプリケーションが閉じられます。エラー レポートには、エラーの原因となったモジュールに関する情報が含まれており、その名前は lavvideo.ax です。おそらく、ある種のコーデックの問題ですが、それでもこの例外をキャッチしたいと考えています。出来ますか?try/catch ブロックが機能しません。

4

2 に答える 2

1

ネイティブ コードの COM または pInvoke で発生する例外は、.NET ランタイム環境からキャッチできません。COM は、呼び出し先 (任意の言語で実装可能) から呼び出し元への例外の伝播をサポートしていません。その理由は、例外の発生とキャッチのメカニズムには、呼び出し先と呼び出し元の両方からの関与またはサポートが必要であり、COM が存在するため不可能になるからです。言語 (C# または C++) に依存しません。

最後に、アウト プロセス COM オブジェクトは、アプリケーションがクラッシュするのを防ぎ、COM オブジェクトがクラッシュし、おそらくそれらを再インスタンス化することを認識するのに役立ちます。プロセス外の COM オブジェクトのインスタンス化は、ほとんどの COM オブジェクトの実装で頻繁に失敗します (仮定とショートカットが原因で) - ああ、場所の透過性はどこにあるのでしょうか?

于 2012-11-28T12:34:41.527 に答える