2010-05-26 3 views
5

HRESULT (http://en.wikipedia.org/wiki/HRESULT) 값을 사람이 읽을 수있는 메시지로 프로그래밍 방식으로 변환하는 방법에 대한 정보는 누구나 제공 할 수 있습니까?HRESULT를 읽을 수있는 메시지로 변환

유틸리티 ERR.EXE가 이것을 알고 있지만 내 앱이 암호가없는 0x800A03EC 대신 사용자에게 의미있는 메시지를 표시해야한다는 것을 알고 있습니다.

+0

여기에 뭔가가 빠졌습니까? 왜'Try ... Catch'를 사용하여 사용자에게 오류 메시지를 보여줄 수 없습니까? –

+0

@Otaku, 나는 Excel VSTO 호출을 만들고 있는데,이 호출 중 일부는 실패 할 때 HRESULT를 반환하고 COMException의 메시지 부분에는 아무것도 반환하지 않습니다. – code4life

+0

@ToddMain 한 번에 표시하지 않으려면 예외 ID를 저장하는 것이 좋습니다. 모든 수업은 내가 GUI 나 터미널을 가지고 일하는 것을 알지 못한다. 그리고 어떤 종류의 GUI인가, 나는 한 번에 메시지를 보여줄 수 없다. C++에서는 모든 클래스에서 변수«LastError»를 만들었습니다. C#에서는 이것이 좋은 생각이 아닌가? –

답변

3

해당 값을 사용하여 HRESULT에서 메시지를 생성 할 수있는 기본 지원이 없습니다. COM 구성 요소는 IErrorInfo 인터페이스를 사용하여 자체적으로 구현해야합니다.

.NET에 내장 된 CLR interop 지원이 이미 자동으로 수행되므로 도움을받을 필요가 없습니다. COM 인터페이스 메서드가 실패 코드를 반환하면 자동으로 적절한 예외가 throw됩니다. Message 속성은 IErrorInfo에서 초기화됩니다. 메시지로 알맞은 것을 얻지 못하면 COM 서버는 메시지를 제공하지 않습니다.

0x800a03ec에 대한 가능성은 많은 오류 원인이있는 낮은 수준의 Excel 오류입니다. "엑셀 오류 1004"로 인터넷 검색을 통해 많은 조회수를 얻을 수 있습니다.

+0

하지만 아마도 사용자 정의 HRESULT를 사용하여 예외를 다시 던질 수 있습니까? 이 경우 예외에는 정보 메시지 등이 있습니다. –

3

FormatMessage 기능을 사용해 보셨습니까? PInvoke 메커니즘을 사용하여 C#에서 사용할 수 있습니다.

관련 문제