win API를 사용하여 HRESULT 값의 문자열 표현을 얻는 방법이 있습니까?
HRESULT 값의 문자열 표현을 추출하는 데 사용할 수있는 win API에 함수가 있습니까?
문제는 모든 반환 값이 MSDN에 문서화되어 있지 않다는 것입니다. 예를 들어 ExecuteInDefaultAppDomain () 함수가 "0x80070002-지정한 파일을 찾을 수 없습니다."를 반환하도록 문서화되어 있지 않습니다. 따라서 일반적인 경우에 사용할 기능이 있는지 궁금합니다.
_com_error 사용할 수 있습니다 .
_com_error err(hr);
LPCTSTR errMsg = err.ErrorMessage();
_com_error어떤 이유로 든 사용하고 싶지 않은 경우 에도 소스를 살펴보고 어떻게 수행되는지 확인할 수 있습니다.
헤더를 포함하는 것을 잊지 마십시오 comdef.h
이를위한 Windows API는 FormatMessage 입니다. 다음은이를 수행하는 방법을 설명하는 링크입니다 . FormatMessage API를 사용하여 오류 메시지 설명을 얻는 방법 .
Win32 메시지 (0x8007로 시작하는 HRESULT가있는 메시지, FACILITY_WIN32)의 경우 hi 순서 단어를 제거해야합니다. 예를 들어 0x80070002에서 0x0002로 FormatMessage를 호출해야합니다.
그러나 모든 유형의 메시지에 대해 항상 작동하는 것은 아닙니다. 그리고 특정 메시지 (기술, 공급 업체 등 특정)의 경우 해당 리소스 DLL을로드해야합니다.이 DLL을 찾아야하므로 항상 쉬운 작업은 아닙니다.
C ++ 11부터이 기능은 표준 라이브러리에 내장되어 있습니다.
#include <system_error>
std::string message = std::system_category().message(hr)
다음은 FormatMessage ()를 사용한 샘플입니다.
LPTSTR SRUTIL_WinErrorMsg(int nErrorCode, LPTSTR pStr, WORD wLength )
{
try
{
LPTSTR szBuffer = pStr;
int nBufferSize = wLength;
//
// prime buffer with error code
//
wsprintf( szBuffer, _T("Error code %u"), nErrorCode);
//
// if we have a message, replace default with msg.
//
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
NULL, nErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) szBuffer,
nBufferSize,
NULL );
}
catch(...)
{
}
return pStr;
} // End of SRUTIL_WinErrorMsg()
ReferenceURL : https://stackoverflow.com/questions/7008047/is-there-a-way-to-get-the-string-representation-of-hresult-value-using-win-api
'Program Club' 카테고리의 다른 글
| VBA의 다중 스레딩 (0) | 2021.01.07 |
|---|---|
| SVN에서 태그와 분기의 차이점은 무엇입니까? (0) | 2021.01.07 |
| datetime.datetime을 datetime.date와 비교할 수 없습니다. (0) | 2021.01.07 |
| Makefile에서 메시지를 어떻게 인쇄 할 수 있습니까? (0) | 2021.01.07 |
| window.onload 이벤트에 추가 하시겠습니까? (0) | 2021.01.07 |