C# ではネイティブ例外回避が発生しますか?
C# で外部のアンマネージ ライブラリを操作する場合、次のような問題が発生する可能性を考慮することが重要です。これらのライブラリの奥深くから発生するネイティブ例外。
標準化可能Try...Catch Capture Native Exceptions?
幸いなことに、C# にはネイティブ例外をキャッチするメカニズムも用意されています。質問: 標準の try...catch ブロックは、これらのアンマネージ例外を変更せずに処理できますか?
答え: ネイティブ例外のキャッチ
ネイティブ例外をキャッチするには、次のことができます。 Win32Exception クラスを使用します。これには、エラー コードを調べて特定のケースに応じて処理できる NativeErrorCode という名前のプロパティが用意されています。
たとえば、次のコード スニペットを考えてみましょう。
const int ERROR_FILE_NOT_FOUND = 2; const int ERROR_ACCESS_DENIED = 5; const int ERROR_NO_APP_ASSOCIATED = 1155; void OpenFile(string filePath) { Process process = new Process(); try { // Calls native application registered for the file type // This may throw a native exception process.StartInfo.FileName = filePath; process.StartInfo.Verb = "Open"; process.StartInfo.CreateNoWindow = true; process.Start(); } catch (Win32Exception e) { if (e.NativeErrorCode == ERROR_FILE_NOT_FOUND || e.NativeErrorCode == ERROR_ACCESS_DENIED || e.NativeErrorCode == ERROR_NO_APP_ASSOCIATED) { MessageBox.Show(this, e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } }
この例では、次のことを試みます。特定のファイルタイプに関連付けられたネイティブアプリケーションを起動します。アプリケーションを開始できない場合は、関連するエラー コードとともに Win32Exception がスローされます。 catch ブロック内の if ステートメントは、特定のエラー コードをチェックし、適切なメッセージを表示します。
以上が標準 C# try...catch ブロックはアンマネージ ライブラリからのネイティブ例外を処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。