はじめに
GetLastError()のコードからエラーメッセージを取得するサンプルプログラムです。
GetLastError()のコードからエラーメッセージを取得する
#include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { LPTSTR lpMessageBuffer = NULL; // 調べたいエラーコード SetLastError(1114); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), LANG_USER_DEFAULT, (LPTSTR)&lpMessageBuffer, 0, NULL); printf("%s\n", lpMessageBuffer); MessageBox(NULL, lpMessageBuffer, NULL, MB_OK); LocalFree(lpMessageBuffer); return 0; }
エラーコードをcsvファイルに出力する
ループしながら、エラーコードをカウントアップしていけばエラーコード一覧が作れる
#include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { LPTSTR lpMessageBuffer = NULL; FILE *fp; fopen_s(&fp, "c:\\err.csv", "wb"); int i = 0; while (true) { SetLastError(i); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), LANG_USER_DEFAULT, (LPTSTR)&lpMessageBuffer, 0, NULL); printf("%s\n", lpMessageBuffer); //MessageBox(NULL, lpMessageBuffer, NULL, MB_OK); if (lpMessageBuffer != NULL) { fprintf(fp, "%d,%s", i, lpMessageBuffer); } LocalFree(lpMessageBuffer); i++; // とりあえず2000件でbreak if (i == 2000) { break; } } fclose(fp); return 0; }
関連記事
- VC++で作るマルチスレッドと排他制御のサンプルプログラム
- 【cppcheck】warning: Opposite conditions in nested 'if' blocks lead to a dead code block.
- 【cppcheck】warning: Redundant assignment of 'xxx' to itself.
- 【cppcheck】error: Memory is allocated but not initialized: xxx
- 【cppcheck】(warning) %d in format string (no. 1) requires 'int' but the argument type is 'ULONG {aka unsigned long}'.