2

我在一个win32 c++ 应用程序中使用winsock2。我将使用 MessageBox 显示可以通过调用 WSAGetLastError() 检索的网络错误。我怎样才能做到这一点?我看到了 FormatMessage 但我不明白如何使用它

4

3 回答 3

4

例如,下面是如何在系统的消息表中搜索错误代码并将格式化的消息放入LPTSTR Error缓冲区中。

// Create a reliable, stream socket using TCP.

if ((sockClient = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
 DWORD err = GetLastError();
 LPTSTR Error = 0;

if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
       NULL,
       err,
       0,
       (LPTSTR)&Error,
       0,
       NULL) == 0)
  {
     // Failed in translating the error.
  }
}
于 2011-01-08T10:55:13.663 回答
1

Hi you can use this code http://www.codeproject.com/KB/tips/formatmessage.aspx

于 2011-01-08T10:28:40.337 回答
1

在 C++11 中,您可以使用:

std::system_category().message(WSAGetLastError());

将您的消息作为 std::string 获取并避免所有讨厌的缓冲区内容:)

请参阅函数文档,以及使用它来引发异常的这个答案

于 2019-07-01T18:38:59.573 回答