Win32 GetLastError関数を文字列に変換する方法


  1. エラーコードを文字列に変換する方法: 以下のコード例を使用して、エラーコードを文字列に変換する方法を示します。
#include <windows.h>
#include <iostream>
#include <string>
std::string GetLastErrorAsString()
{
    DWORD errorMessageID = ::GetLastError();
    if (errorMessageID == 0)
        return std::string(); // エラーコードがない場合は空の文字列を返す
    LPSTR messageBuffer = nullptr;
    size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                                 nullptr, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, nullptr);
    std::string message(messageBuffer, size);
    // FormatMessage関数が返す文字列の最後に改行文字が含まれることがあるので、それを削除する
    if (!message.empty() && message[message.length() - 1] == '\n')
        message.erase(message.length() - 1);
    LocalFree(messageBuffer);
    return message;
}
int main()
{
    // エラーコードの取得と表示
    DWORD errorCode = ::GetLastError();
    std::cout << "Error code: " << errorCode << std::endl;
    // エラーコードを文字列に変換して表示
    std::string errorMessage = GetLastErrorAsString();
    std::cout << "Error message: " << errorMessage << std::endl;
    return 0;
}

上記のコードでは、GetLastErrorAsString関数を使用してエラーコードを文字列に変換しています。FormatMessage関数を使用して、エラーコードに対応するエラーメッセージを取得し、文字列として返しています。

  1. エラーハンドリングの例: 以下は、エラーハンドリングの例です。Win32 APIの関数を呼び出した後にGetLastError関数を使用してエラーコードを取得し、エラーメッセージを表示します。
#include <windows.h>
#include <iostream>
#include <string>
void HandleError()
{
    DWORD errorCode = ::GetLastError();
    std::string errorMessage = GetLastErrorAsString();
    std::cout << "Error code: " << errorCode << std::endl;
    std::cout << "Error message: " << errorMessage << std::endl;
}
int main()
{
    HANDLE hFile = ::CreateFileA("nonexistent_file.txt", GENERIC_READ, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        // エラーハンドリング
        HandleError();
    }
// ファイルの操作を行う...
    return 0;
}

上記のコードでは、CreateFileA関数を使用して存在しないファイルを開こうとしています。関数が失敗した場合、HandleError関数が呼び出されてエラーコードとエラーメッセージが表示されます。

このように、GetLastError関数を使用してエラーコードを取得し、それを文字列に変換することで、Win32 APIのエラーメッセージをユーザーにわかりやすく表示することができます。この方法を使ってブログ投稿を書くことができます。