> 백엔드 개발 > C++ > 표준 C# try...catch 블록이 관리되지 않는 라이브러리의 기본 예외를 처리할 수 있습니까?

표준 C# try...catch 블록이 관리되지 않는 라이브러리의 기본 예외를 처리할 수 있습니까?

Barbara Streisand
풀어 주다: 2025-01-03 02:41:38
원래의
759명이 탐색했습니다.

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

C#에서 네이티브 예외 회피가 발생할 수 있나요?

C#에서 관리되지 않는 외부 라이브러리로 작업할 때 직면할 가능성을 고려하는 것이 중요합니다. 해당 라이브러리 내부 깊은 곳에서 발생하는 기본 예외.

Can Standard 시도해 보세요...네이티브 예외 캡처를 포착하시겠습니까?

다행히 C#에서는 네이티브 예외도 포착할 수 있는 메커니즘을 제공합니다. 문제는: 표준 try...catch 블록이 이러한 관리되지 않는 예외를 수정 없이 처리할 수 있습니까?

답변: 네이티브 예외 잡기

네이티브 예외를 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿