首頁 >後端開發 >C++ >標準 C# try...catch 區塊可以處理來自非託管程式庫的本機異常嗎?

標準 C# try...catch 區塊可以處理來自非託管程式庫的本機異常嗎?

Barbara Streisand
Barbara Streisand原創
2025-01-03 02:41:38765瀏覽

Can Standard C# try...catch Blocks Handle Native Exceptions from Unmanaged Libraries?

C# 中是否會發生本機異常規避?

在 C# 中使用外部非託管程式庫時,必須考慮面臨以下情況的可能性:源自這些庫深處的本機異常。

Can Standard嘗試...捕捉捕捉本機異常?

幸運的是,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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn