Rumah >pembangunan bahagian belakang >C++ >Bolehkah Standard C# cuba...tangkap Blok Mengendalikan Pengecualian Asli daripada Perpustakaan Tidak Terurus?

Bolehkah Standard C# cuba...tangkap Blok Mengendalikan Pengecualian Asli daripada Perpustakaan Tidak Terurus?

Barbara Streisand
Barbara Streisandasal
2025-01-03 02:41:38783semak imbas

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

Bolehkah Pengelakan Pengecualian Asli Berlaku dalam C#?

Apabila bekerja dengan perpustakaan luaran yang tidak terurus dalam C#, adalah penting untuk mempertimbangkan kemungkinan menghadapi pengecualian asli yang berasal dari dalam perpustakaan tersebut.

Boleh Standard Try...Catch Capture Native Exceptions?

Nasib baik, C# menyediakan mekanisme untuk menangkap pengecualian asli juga. Persoalannya ialah: Bolehkah standard cuba...catch block mengendalikan pengecualian tidak terurus ini tanpa sebarang pengubahsuaian?

Jawapan: Menangkap Pengecualian Asli

Untuk menangkap pengecualian asli, anda boleh gunakan kelas Win32Exception. Ia menawarkan sifat bernama NativeErrorCode yang membolehkan anda memeriksa kod ralat dan mengendalikan kes tertentu dengan sewajarnya.

Sebagai contoh, pertimbangkan coretan kod berikut:

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);
        }
    }
}

Dalam contoh ini, kami cuba untuk melancarkan aplikasi asli yang dikaitkan dengan jenis fail tertentu. Jika aplikasi tidak boleh dimulakan, Win32Exception dilemparkan dengan kod ralat yang berkaitan. Pernyataan if dalam blok tangkapan menyemak kod ralat tertentu dan memaparkan mesej yang sesuai.

Atas ialah kandungan terperinci Bolehkah Standard C# cuba...tangkap Blok Mengendalikan Pengecualian Asli daripada Perpustakaan Tidak Terurus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn