[c#] COMException 특정 오류 코드 잡기


Answers

HRESULT 값은 심각도 코드, 설비 코드 및 오류 코드의 세 필드로 나뉜 32 비트가 있습니다. 심각도 코드는 반환 값이 정보, 경고 또는 오류를 나타내는 지 여부를 나타냅니다. 시설 코드 는 오류를 담당하는 시스템의 영역을 식별합니다. 오류 코드 는 예외를 나타 내기 위해 지정된 고유 번호입니다. 각 예외는 고유 한 HRESULT에 매핑됩니다. 발췌 : http://en.wikipedia.org/wiki/HRESULT

수집 한 내용에 따라 HRESULT 비트의 전반부는 예외를 발생시키는 시스템 / 프로세스에 따라 달라질 수 있습니다. 후반부에는 오류 유형이 있습니다.

코드는 다음과 같아야합니다.

try {
    // something
} catch (COMException ce) {
    if ((uint)ce.ErrorCode & 0x0000FFFF == 0x800A03EC) {
        // try something else 
    }
}

참고 : 나는 .NET 사용자가 아니므로 위의 코드에서 구문 오류가 발생하지 않도록 유의하십시오.

Question

나는 누군가가 나를 도울 수 있기를 바라고있다. COM에서 특정 Exception을 얻었습니다. 다른 것들을 잡으려고 시도합니다. 나머지는 무시해야합니다. 예외가있는 내 오류 메시지는 다음과 같습니다.

System.Runtime.InteropServices.COMException (0x800A03EC) : Microsoft Office Excel에서 'C : \ test.xls'파일에 액세스 할 수 없습니다. 몇 가지 이유가있을 수 있습니다.

그래서 나의 처음 시도는

try
{
 // something
}
catch (COMException ce)
{
   if (ce.ErrorCode == 0x800A03EC)
   {
      // try something else 
   }
}

그러나 컴파일러 경고를 읽었습니다.

경고 22 적분 상수와의 비교는 쓸모가 없다. 상수가 'int'형식 범위를 벗어납니다 ..... ExcelReader.cs 629 21

이제 0x800A03EC가 HResult라는 것을 알고 있으며 MSDN을 살펴보고 읽었습니다.

HRESULT는 심각도 코드, 설비 코드 및 오류 코드의 세 가지 필드로 나누어 진 32 비트 값입니다. 심각도 코드는 반환 값이 정보, 경고 또는 오류를 나타내는 지 여부를 나타냅니다. 시설 코드는 오류를 담당하는 시스템의 영역을 식별합니다.

그래서 궁극적 인 질문은, 내가 그 특정 예외를 잡아낼 수 있도록하는 것입니다. 또는 HResult에서 오류 코드를 얻으려면 어떻게해야합니까?

미리 감사드립니다.




Links



Tags

c# c#   com