Programming Language/C, C++

HRESULT, LRESULT

MOLOKINI 2014. 5. 11. 20:46

HRESULT

 

32비트의 signed 형 정수

BOOL형의 TRUE/FALSE와 마찬가지로 

SUCCEEDED/FAILED

를 사용합니다.

하지만 BOOL과는 대조적으로 반드시 값을 리턴받지는 않아도 됩니다.

 

if(FAILED(CreateWindow(...))){

       MessageBox("윈도우 생성에 실패했습니다");

}

 

여기서 FAILED에 주목할것이..

윈도우 생성에 실패할 경우 CreateWindow()메서드에 문제가 생긴것이기 때문에, 저 메시지 박스가 뜨면 그냥 저 메서드만 보면 됩니다.

 

하지만, 주의할점이 BOOL형은 TRUE/FALSE가 1/0인데 반해

HRESULT는 SUCCEEDED/FAILED가 0/1입니다.

 

* HRESULT 형의 구조 
0~15 비트 : RETURN CODE 
16~28 비트 : FACILITY 
29~30 비트 : R 
31 비트 : SEVERITY ( SEVERITY(31비트)는 함수의 수행의 성공과 실패를 알려주는 코드다.)



* HRESULT의 상태 정보 요약.

S_OK : 때때로 Boolean TRUE 값(0X0)으로 S_FALSE와 함께 사용되며 함수가 성공하였음을 의미한다. 
NOERROR : S_OK와 동일한 의미이다. 
S_FALSE : S_OK와 반대로 Boolean FALSE 값(0X1)으로 함수가 실패하였음을 의미한다. 
E_UNEXPRCTED : 치명적인 실패를 의미한다. 
E_NOTIMPL : 멤버 함수에 구현 코드가 포함되어 있지 않다. 
E_OUTOFMEMORY : 필요한 메모리를 할당할 수 없음 
E_INVALIDARG : 하나 혹은 그 이상의 인자가 타당하지 않음 
E_NOINTERFACE : 요청한 인터페이스를 지원하지 않음 
E_POINTER : 타당하지 않은 포인터 
E_HANDLE : 타당하지 않은 처리 
E_ABORT : 작동 중지 
E_FAIL : 특정하지 않은 실패 
E_ACCESSDENIED : 일반적 접근이 금지된 에러

 

 

LRESULT

 

LRESULT는 long형 타입으로 Win32환경에서 처리를 마친 후 o/s에게 어떤 신호를 주기 위해서 사용되는 값이다.

각각의 메시지 case에 대한 처리 값이 때로는 -1, 0, 1 등으로, 어떤 때는 비트 플래그로 o/s가 알 수 있게 설정한다.

 

대부분의 경우에는 0을 리턴하면 내가 모든 메시지를 처리할테니까 o/s에 더이상 메시지를 처리하지 말라는 것으로 인식하고 간혹 -1인 경우는 o/s가 진행하던 작업을 취소시키는 의미도 있다.

'Programming Language > C, C++' 카테고리의 다른 글

struct, typedef  (0) 2014.05.13
C++ TR1 설치  (0) 2014.05.13
inline 함수  (0) 2014.05.11
릴리즈모드 링크에러  (0) 2014.05.11
Namespace  (0) 2014.05.11