Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: juvf от Сентябрь 21, 2016, 08:42



Название: коды ошибок winsock
Отправлено: juvf от Сентябрь 21, 2016, 08:42
WSAGetLastError() возвращает код последней ошибки (10051, 10060, ...) как в с/с++ получить текст ошибки?


Название: Re: коды ошибок winsock
Отправлено: gil9red от Сентябрь 21, 2016, 09:10
http://stackoverflow.com/a/17387176/5909792
Код
C++ (Qt)
 
//Returns the last Win32 error, in string format. Returns an empty string if there is no error.
std::string GetLastErrorAsString()
{
   //Get the error message, if any.
   DWORD errorMessageID = ::GetLastError();
   if(errorMessageID == 0)
       return std::string(); //No error message has been recorded
 
   LPSTR messageBuffer = nullptr;
   size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                                NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
 
   std::string message(messageBuffer, size);
 
   //Free the buffer.
   LocalFree(messageBuffer);
 
   return message;
}
 
 


Название: Re: коды ошибок winsock
Отправлено: juvf от Сентябрь 21, 2016, 10:24
спасибо. только у меня с LANG_NEUTRAL кракозябры. С LANG_ENGLISH на английском всё заработало.


Название: Re: коды ошибок winsock
Отправлено: gil9red от Сентябрь 21, 2016, 10:36
Можно и на русском получать :D


Название: Re: коды ошибок winsock
Отправлено: juvf от Сентябрь 21, 2016, 10:55
у меня винда, системный язык win1251. Пишу в креаторе с кодировкой по умолчанию UTF-8.  От сюда видать несостыковки. Да и английского достаточно, всё лучше голых 10058


Название: Re: коды ошибок winsock
Отправлено: kuzulis от Сентябрь 21, 2016, 12:04
Если используется Qt, то проще пареной репы.. Юзай функцию qt_error_string(int errorCode)


Название: Re: коды ошибок winsock
Отправлено: gil9red от Сентябрь 21, 2016, 12:34
Код функции qt_error_string(int errorCode) (https://gitlab.com/pteam/korvins-qtbase/blob/39b45781562712f320edb6519aef7b2444699848/src/corelib/global/qglobal.cpp#L1987)  :)


Название: Re: коды ошибок winsock
Отправлено: juvf от Сентябрь 21, 2016, 12:56
Если используется Qt, то проще пареной репы.. Юзай функцию qt_error_string(int errorCode)
qt_error_string() вполне подходит. и до кучи.... а как заставить qt_error_string писать на английском?


Название: Re: коды ошибок winsock
Отправлено: gil9red от Сентябрь 21, 2016, 13:55
Наверное, никак, может смена локали поможет...
Та кто, qt_error_string использует для винды FormatMessage, т.е. открываете ссылку (или открываете исходник и смотрите в qglobal.cpp), которую приводил, копируете функцию, меняете флаг в FormatMessage на нужный вам и используете