C++でGetLastErrorを使ってエラーメッセージを出力する方法


以下に、GetLastError関数を使用してエラーメッセージを出力する方法のシンプルな例を示します。

#include <iostream>
#include <windows.h>
void PrintLastError()
{
    DWORD errorCode = GetLastError();
    LPSTR errorMessage = nullptr;
    FormatMessageA(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        nullptr,
        errorCode,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        reinterpret_cast<LPSTR>(&errorMessage),
        0,
        nullptr);
    std::cout << "エラーコード: " << errorCode << std::endl;
    std::cout << "エラーメッセージ: " << errorMessage << std::endl;
    LocalFree(errorMessage);
}
int main()
{
    // エラーが発生するコードの例
    FILE* file = nullptr;
    fopen_s(&file, "invalid_file.txt", "r");
    if (file == nullptr)
    {
        PrintLastError();
    }
    return 0;
}

この例では、GetLastError関数を使用して直前のエラーコードを取得し、FormatMessageA関数を使用してエラーコードに対応するエラーメッセージを取得しています。取得したエラーコードとエラーメッセージは、std::coutを使用して出力されます。

注意点として、FormatMessageA関数は、エラーメッセージをローカルのマルチバイト文字列(LPSTR)として返すため、日本語のエラーメッセージを正しく表示するには、プログラムがマルチバイト文字セットでコンパイルされている必要があります。

以上が、C++でGetLastErrorを使ってエラーメッセージを出力する方法のシンプルな例です。コード例を参考にしながら、自身のプログラムに組み込んでみてください。