Получить отформатированное сообщение для кодов ошибок WSA - PullRequest
2 голосов
/ 08 января 2011

Я использую winsock2 в приложении win32 c ++.Я бы отобразил с MessageBox сетевые ошибки, которые я могу получить, вызвав WSAGetLastError ().Как я могу это сделать?Я видел FormatMessage, но я не понимал, как его использовать

Ответы [ 3 ]

4 голосов
/ 08 января 2011

Вот как, например, следующее ищет код ошибки в таблице системных сообщений и помещает отформатированное сообщение в буфер 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.
  }
}
1 голос
/ 08 января 2011

Привет, вы можете использовать этот код http://www.codeproject.com/KB/tips/formatmessage.aspx

0 голосов
/ 01 июля 2019

В C ++ 11 вы можете использовать:

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

чтобы получить ваше сообщение в виде std :: string и избежать всего этого неприятного буфера:)

См. документацию по функциям и этот ответ, который использует его для выдачи исключений .

...