- エラーコードを文字列に変換する方法: 以下のコード例を使用して、エラーコードを文字列に変換する方法を示します。
#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関数を使用して、エラーコードに対応するエラーメッセージを取得し、文字列として返しています。
- エラーハンドリングの例: 以下は、エラーハンドリングの例です。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のエラーメッセージをユーザーにわかりやすく表示することができます。この方法を使ってブログ投稿を書くことができます。