728x90
윈도우환경에서 프로그램을 개발하다보면 피치 못하게 수없이 에러 상황을 겪게 됩니다.
그러한 에러 상황에서는 이유를 알아내야 합니다.
이럴 때 사용할 수 있는 함수가 바로 GetLastError()입니다.
하지만 이 함수의 결과는 바로 알아보기 힘든 숫자입니다.
이 글에서는 GetLastError()가 반환하는 숫자에 대해,
설명적인 문자열로 반환해주는 함수와 출력해주는 함수의 코드를 소개합니다.
소스코드는 다음과 같습니다.
#include <windows.h>
#include <stdio.h>
char* GetLastErrorAsString()
{
DWORD dwLastError = GetLastError();
if (0 == dwLastError)
return NULL;
char* szMessageBuffer = NULL;
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPSTR)&szMessageBuffer, 0, NULL);
// NOTE : szMessageBuffer must be freed after use
return szMessageBuffer;
}
void PrintLastErrorString()
{
LPSTR lpMessageBuffer = NULL;
lpMessageBuffer = GetLastErrorAsString();
if (NULL == lpMessageBuffer)
return;
printf("%s", lpMessageBuffer);
LocalFree(lpMessageBuffer);
}
//[[ code for unit test
int main(int argc, char** argv)
{
FILE* fp = NULL;
fopen_s(&fp, "C:\\a_non_existent_file.txt", "r");
PrintLastErrorString();
fopen_s(&fp, "C:\\windows\\system32\\notepad.exe", "r");
PrintLastErrorString();
return EXIT_SUCCESS;
}
//]] code for unit test
실행결과는 다음과 같습니다.
C:\Users\Admin\source\repos\GetLastError\Release>GetLastError.exe
지정된 파일을 찾을 수 없습니다.
C:\Users\Admin\source\repos\GetLastError\Release>
아래에 프로젝트 파일을 첨부합니다.
728x90
'Windows' 카테고리의 다른 글
visual studio 2022 언어 설정 (0) | 2022.03.05 |
---|---|
관리자 권한으로 cmd창 실행하기 (0) | 2022.03.04 |
windows service install/uninstall (0) | 2022.03.04 |
Windows Application FindProcessId C/C++ Code (0) | 2022.02.25 |
배치스크립트 파일읽기 (0) | 2022.02.25 |