COM 오류 코드에 대한 정보를 얻을 수 있는 가장 좋은 소스는 무엇입니까?[닫은]

StackOverflow https://stackoverflow.com/questions/52059

  •  09-06-2019
  •  | 
  •  

문제

HRESULT만 있으면 COM 오류를 해결하기 위한 의미, 가능한 원인 및 가능한 솔루션에 대한 최상의 정보를 어디서 얻을 수 있는지 알 수 없습니다.

'80004027'과 같은 용어를 Google을 검색하는 것은 90%의 시간의 무작위 토론 그룹으로 보낼 때 거의 쓸모가 없습니다. '80004027이 무엇을 의미 하는가?' 대답하지 않습니다.

이에 대한 좋은 자료는 무엇입니까?MSDN이 Google의 최고 검색결과가 아닌 이유는 무엇입니까?

도움이 되었습니까?

해결책

저는 항상 WinError.h를 사용합니다.여기에는 모든 종류의 Windows 오류 코드가 대부분 포함됩니다.

주의해야 할 주요 지표는 코드의 Facility 부분입니다.두 번째로 중요한 바이트입니다.즉, 0x80nnmmmm입니다. 여기서 nn은 Facility입니다.이는 어떤 구성 요소가 코드를 생성했는지 알려줍니다.7의 기능을 가진 모든 것은 HRESULT로 다시 패키징된 Windows 오류 코드이므로 낮은 단어를 10진수로 변환하고 WinError.h에서 찾아야 합니다.자체 헤더에 나타나는 오류 범위도 있습니다(예:12000 - 12999 사이의 모든 항목은 WinInet 오류 코드이므로 WinInet.h에서 찾아야 합니다.

오류 코드를 검색하면 코드 자체나 오류 메시지의 문구보다 더 많은 문서에서 찾을 수 있는 기호 이름이 제공됩니다.

FACILITY_ITF(값이 4이므로 이러한 HRESULT는 0x8004로 시작함)는 오류가 사용 중인 인터페이스에 의해 정의되었음을 나타냅니다.그것이 무엇을 의미하는지 알아보려면 해당 인터페이스를 확인해야 합니다.

마지막으로 COM은 확장된 오류 정보를 검색하기 위해 IErrorInfo 인터페이스도 제공합니다.GetErrorInfo를 호출하여 오류 개체를 검색합니다.ISupportErrorInfo를 쿼리하고 해당 인터페이스의 InterfaceSupportsErrorInfo 메서드를 호출하여 호출한 인터페이스가 실제로 오류 개체를 설정했는지 여부를 확인해야 합니다(물론 템플릿 코드인 경우 거짓말일 수 있음).

다른 팁

%PROGRAMFILES%[Visual Studio의 일부 버전] ools Common7\ 폴더에 있는 오류 조회(ErrLook.exe)는 오류 메시지를 자주 표시하지만 항상 그런 것은 아닙니다.

    |---------------------------------------------------|
    | [] Error Lookup                                   |
    |---------------------------------------------------|
    |   Value: [0x80004027]                             |
    |                                                   |
    |   Error Message                                   |
    |   +---------------------------------------------+ |
    |   |The component or application containing the  | |
    |   |component has been disabled                  | |
    |   |                                             | |
    |   +---------------------------------------------+ |
    |   [Modules...]    [Look up]    [Close]    [Help]  |
    |----------------------------------------------------

그래도 문제가 해결되지 않으면 여기에서 몇 가지 아이디어를 따를 수 있습니다.http://blogs.msdn.com/oldnewthing/archive/2008/09/01/8914664.aspx

(오류 조회는 단순히 format_message_from_system flag로 formatmessage ()를 호출합니다)

COM 오류가 시스템 오류가 아닌 경우 오류를 발생시킨 구성 요소의 설명서를 확인해야 할 수도 있습니다.

코드에서 오류를 포착하는 경우 구성 요소가 다양한 오류(VB의 Err 개체와 동일한 GetErrorInfo())를 구현하여 문제를 설명하는 전체 메시지를 얻을 수 있기를 바랍니다.

Prakash의 좋은 링크(저는 RCNr에 대해 알지 못했습니다. 해당 바이트가 시설의 일부라고 생각했습니다. 하지만 이는 16비트 Windows에서만 해당되는 것 같습니다.)

이러한 알 수 없는 코드는 사용 중인 인터페이스/구성 요소와 관련된 경우가 많습니다.시설은 FACILITY_ITF로 설정됩니다.오래된 프로그램인 HRPlus(링크?) HRESULT를 구문 분석합니다.

COM 오류 코드의 구조

COM 오류 코드에 대한 Google 결과에서 두 번째입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top