読者です 読者をやめる 読者になる 読者になる

小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【VC++】GetLastError()のコードからエラーメッセージを取得する

C++
はじめに

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;

}

f:id:replication:20150329232141p:plain