2012-05-29 3 views
0

com 예외에서 HRESULT 값을 얻으려고하면 경고 메시지가 표시되고 이것이 C#에서 COM 예외를 처리하는 올바른 방법이 아닌 경우 의심 스럽습니다. 코드를 조언 해주십시오. 아래처럼.경고 COM 예외 처리 C#

try 
{ 
...      
} 
catch (System.Runtime.InteropServices.COMException comex) 
{ 
// Warning 8 Comparison to integral constant is useless; the constant is outside the range of type 'int' 

if (comex.ErrorCode == Constants.E_FAIL) 
{ 

} 

} 

E_FAIL는

public const UInt32 E_FAIL = 0x80004005; 

답변

2
틀림없이

는 Win32에서 더 일관했을 것이다 API를 사용하여 을 Int32으로 UInt32이 아닌 int으로 정의하십시오.

아마 UInt32가 CLS 규격이 아니기 때문에 이것은 수행되지 않았을 것입니다.

public const int E_FAIL = unchecked((int)0x80004005); 
0

comex.ErrorCode Int32 형식 인 것으로 정의 (here 참조)과는 Constants.E_FAIL INT32 한계 (Int32.MaxValue = 7FFFFFFF)를 초과한다.

나는 당신이 UINT32와 함께 INT32을 비교하고 참조 : 당신이 비교하기 전에 후자를 변환해야합니다 ... 예를 들어
당신이 사용할 수

if (comex.ErrorCode == unchecked((int)Constants.E_FAIL)) 
+0

E_FAIL 값이 MSDN에 정의되어 있습니다. 직접 정의 할 수 없으며 그렇지만 int32를 초과 할 수도 있지만 예외로부터 HRESULT를 얻으려면 어떻게해야합니까? – Ahmed

0

당신은 같은 것을 할 수있는 :

난 당신이 int로서 귀하의 상수를 정의 제안 일부 오류 코드는 당신이 가능성으로 볼 수 없을 것이라는 점을,

if (comex.ErrorCode == unchecked((int)Constants.E_FAIL)) 
{ 
    // do stuff 
} 

참고 그러나이 그들이 E_FAIL이 그 중 하나 인 것처럼 보이지 않지만 specific exceptions에 매핑됩니다.