http://cafe.naver.com/codingduckhoo/521




*LRESULT

: 4바이트 정수 형이다. WIN32환경에서 메시지를 처리한 후 O/S에게 신호를 주기 위해 사용한다.
  대부분의 경우 0을 리턴하면 메시지 처리가 완료되었으니 O/S에서 더 이상 처리할 메시지가 없다는 것을 의미하며,
  -1로 O/S가 처리하던 작업을 취소시키는 경우도 있다.

*HRESULT

: 32비트 정수형으로, 다양한 메시지를 리턴한다. 
  하위16byte까지 특정 오류 코드,
  상위 16byte까지 하위 16byte 코드 이외의 정보를 표현한다.

: 좀더 자세하게는 1.심각도 코드, 2. 기능 코드, 3.오류 코드의 세 가지 필드로 나뉜다.
  1.심각도 코드 - return 정보, 경고 또는 오류를 표시하는지 여부를 저장.
  2.기능 코드    - 오류를 담당하는 시스템 영역 식별, 예외를 표시하기 위해 할당되는 고유한 숫자.
  3.오류 코드    - 예외 처리를 위한 throw 정보.
  *예외를 throw할 때, 공용 언어 런타임은 HRESULT를 COM 클라이언트에 전달한다.
   비관리 코드가 오류를 반환하면,, HRESULT는 예외로 전환되고 공용 언어 런타임에 의해 throw된다(사용자 예외처리).

: 기본 특징은 TRUE와 FALSE의 값이 반대라는 점.
  TRUE = 0, FALSE = 1.
  상위 1byte로 TRUE / FALSE를 처리한다.

: 반환형이 HRESULT라고 해서 꼭 반환값을 가질 필요는 없다. 
  return값이 없어도 된다.

: 각종 코드를 저장하여 리턴하기 때문에 디버깅 처리시에 편리하다.
  대게의 경우, 반환값에 의한 예외처리시 if문을 이용하여 넘겨 받은 return값으로 오류 메시지를 띄우지만,
  HRESULT는 예외상황을 스스로 인식하여 코드화 하기 때문에 사용자는 O / S에서 throw한 에러코드 처리만 한다.
  비관리 코드가 오류를 반환한 것이 아니고, 
  특정한 예외 처리를 할 것이 아니라면, 어떤 예외 사항이 발생했는지 사용자가 따로 throw할 필요가 없다는 것.

: HRESULT가 반환하는 값은 다음과 같다.
  (반환값이 수십 개에 달하여, 요약한다. 자세한 내용은 MSDN의 HRESULT Values를 참조)

 S_OK(Operation successful(0x00000000))
  : 때때로 Boolean TRUE 값(0x0)으로 S_FAUL와 함께 사용되며 함수가 성공하였음을 의미

  E_ABORT(Operation aborted(0x80004004))
  : 작동 정지

  E_ACCESSDENIED(General access denied error(0x80070005))
  : 일반적 접근의 금지된 에러

  E_FAIL(Unspecified failure(0x80004005))
  : 실행 실패

  E_HANDLE(Handle that is not valid(0x80070006))
  : 적합하지 않은 처리

  E_INVALIDARG(One or more arguments are not valid(0x80070057))
  : 하나 혹은 그 이상의 인자가 불분명

  E_NOINTERFACE(No such interface supported(0x80004002))
  : 요청한 인터페이스를 미지원

  E_NOTIMPL(Not implemented(0x80004001))
  : 멤버 함수에 구현 코드가 미포함

  E_OUTOFMEMORY(Failed to allocate necessary memory(0x8007000E))
  : 필요한 메모리가 할당할 수 없음

  E_POINTER(Pointer that is not valid(0x80004003))
  : 적합하지 않은 포인터

  E_UNEXPECTED(Unexpected failure(0x8000FFFF))
  : 치명적인 실패를 의미

반응형

+ Recent posts