Windows実行時の型がCOMエラーを発生させた場合.NETはException
インスタンスにこのエラーを頻繁に(または常に?)ラップするようです。エラーメッセージには、COM HRESULTエラーコードが含まれています。例えばAES-CBCで新しいCryptographic APIを使用する場合、バッファ長が間違っていると、「指定されたユーザバッファは要求された操作(Exception from HRESULT: 0x800706F8
)に対して有効ではありません」というメッセージとともにException
になります。例外が発生するWinRT例外を処理する方法は?
さて、これらの例外をどうやって処理するのですか?私たちは例外からどのような種類の例外であるかを知るためにHRESULT
コードを読みますか?古典的な.NETで私はCryptographicException
私は他のエラーと暗号のエラーを区別するために使用することができます。
私が理解していない別のことは、Microsoftのコード品質ルールでは、Exceptionをスローしないで常に型を派生させるべきだということです。その理由は、OutOfMemoryException
のようなより多くの致命的な例外をキャッチする一般のException
に誰も遭遇しないように強制されなければならないからです。もう1つのルールでは、決してライブでExceptio
を捕まえるべきではないと言います。 Windows StoreアプリケーションまたはWinRTライブラリでException
を強制的に取得するように強制すると、これらのポリシーに従うことができますか?
ところで:Clemens Vasters shows in his blog how we can catch Exception while avoiding to catch fatal exception。私はキャッチException
はもはや悪いコードではないと仮定します。
リンクされたブログエントリに関して、リストされた「致命的な」例外の多くは、マネージコードによって捕らえられません。注目すべきは、「StackOverflowException」ですが、私はAVsが捕まえられないことはかなり確信しています(どちらもネイティブコードで捕らえることができますが、そうすることは危険です)。 _appear_finalが実際にそうでないかもしれないいくつかの例外もあることに注意してください。たとえば、多くのCOMコンポーネントは、特定のバッファ内の領域が使い果たされたときに 'E_OUTOFMEMORY'を返します。このHRESULTはOutOfMemoryExceptionとして変換されますが、プロセスがそのアドレス空間全体を使い果たしているわけではありません。 –