乐闻世界logo
搜索文章和话题

如何从GetLastError()返回的错误代码中获取错误消息?

5 个月前提问
4 个月前修改
浏览次数17

1个答案

1

在Windows编程中,GetLastError()函数用于获取最近一次API调用失败的错误代码。当你调用了一个Windows API函数,如果该函数执行失败,你可以立即调用GetLastError()来获取具体的错误代码。了解错误代码对于调试和错误处理是非常重要的。

要从GetLastError()得到的错误代码中获取可读的错误消息,你可以使用FormatMessage()函数。这个函数能根据错误代码,查找相应的描述文本,帮助开发者理解错误原因。

以下是使用FormatMessage()将错误代码转换为错误消息的步骤和示例:

步骤

  1. 调用API函数:首先,你需要调用Windows API函数。
  2. 检查错误:如果该函数返回表明错误的结果(通常是NULL或FALSE),你应该立即调用GetLastError()以获取错误代码。
  3. 调用FormatMessage():使用获取的错误代码调用FormatMessage()函数来获取描述错误的文本消息。

示例代码

cpp
#include <windows.h> #include <iostream> int main() { // 模拟一个错误情况,例如打开一个不存在的文件 HANDLE hFile = CreateFile(TEXT("nonexistent.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { DWORD dwError = GetLastError(); LPVOID lpMsgBuf; // 使用 FormatMessage 获取错误信息 FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // 显示错误消息 std::wcout << L"错误代码: " << dwError << L"\n错误消息: " << (LPCTSTR)lpMsgBuf << std::endl; // 释放内存 LocalFree(lpMsgBuf); } return 0; }

在这个例子中,我们试图打开一个不存在的文件,这将导致CreateFile函数失败。当函数失败时,我们通过GetLastError()获取错误代码,并通过FormatMessage()获得并显示错误信息。

通过这种方式,你可以根据错误代码获取到具体的错误信息,非常有助于调试和错误处理。

2024年6月29日 12:07 回复

你的答案