다음은 시스템에서 오류 메시지를 다시 가져 오는 적절한 방법입니다 HRESULT
(이 경우 hresult로 명명하거나으로 바꿀 수 있음 GetLastError()
).
LPTSTR errorText = NULL;
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM
|FORMAT_MESSAGE_ALLOCATE_BUFFER
|FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hresult,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&errorText,
0,
NULL);
if ( NULL != errorText )
{
LocalFree(errorText);
errorText = NULL;
}
이것과 David Hanak의 대답의 주요 차이점은 FORMAT_MESSAGE_IGNORE_INSERTS
깃발 사용입니다 . MSDN은 삽입을 사용하는 방법에 대해 약간 불분명하지만 Raymond Chen 은 시스템 메시지를 검색 할 때 삽입을 사용해서는 안된다고 지적합니다 . 시스템이 어떤 삽입을 예상하는지 알 수있는 방법이 없기 때문입니다.
FWIW, Visual C ++를 사용하는 경우 _com_error
클래스 를 사용하여 생활을 좀 더 쉽게 만들 수 있습니다 .
{
_com_error error(hresult);
LPCTSTR errorText = error.ErrorMessage();
}
내가 아는 한 MFC 또는 ATL의 일부가 아닙니다.