Windows ランタイム タイプで COM エラーが発生した場合、.NET はこのエラーを頻繁に (または常に?)Exception
インスタンスにラップしているようです。エラー メッセージには、COM HRESULT エラー コードが含まれます。たとえば、AES-CBC で新しい暗号化 API を使用すると、バッファー長が正しくないException
と、「指定されたユーザー バッファーは、要求された操作に対して有効ではありません。( Exception from HRESULT: 0x800706F8
)」というメッセージが表示されます。
さて、これらの例外をどのように処理すればよいのでしょうか? 例外からコードを読み取って、HRESULT
それがどのような種類の例外であったかを理解する必要がありますか? 従来の .NET では、CryptographicException
暗号化エラーを他のエラーと区別するために使用できる を取得していました。
私が理解していないもう 1 つのことは、Microsoft のコード品質規則では、決して例外をスローしてはならず、常に派生型をスローしてはならないということです。その理由は、同様Exception
に致命的な例外をキャッチするジェネラルを強制的にキャッチする必要がないからOutOfMemoryException
です。Exceptio
別の規則では、ライブラリで n を決してキャッチしてはならない、というものがあります。Exception
Windows ストア アプリまたは WinRT ライブラリでキャッチする必要がある場合、これらのポリシーに従うにはどうすればよいでしょうか?
ところで、Clemens Vasters は彼のブログで、致命的な例外をキャッチせずに例外をキャッチする方法を示しています。キャッチException
はもはや悪いコードではないと思います。