Russian Qt Forum
Март 28, 2024, 15:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: коды ошибок winsock  (Прочитано 10717 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 564


Просмотр профиля
« : Сентябрь 21, 2016, 08:42 »

WSAGetLastError() возвращает код последней ошибки (10051, 10060, ...) как в с/с++ получить текст ошибки?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Сентябрь 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;
}
 
 
Записан

juvf
Программист
*****
Offline Offline

Сообщений: 564


Просмотр профиля
« Ответ #2 : Сентябрь 21, 2016, 10:24 »

спасибо. только у меня с LANG_NEUTRAL кракозябры. С LANG_ENGLISH на английском всё заработало.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Сентябрь 21, 2016, 10:36 »

Можно и на русском получать Веселый
Записан

juvf
Программист
*****
Offline Offline

Сообщений: 564


Просмотр профиля
« Ответ #4 : Сентябрь 21, 2016, 10:55 »

у меня винда, системный язык win1251. Пишу в креаторе с кодировкой по умолчанию UTF-8.  От сюда видать несостыковки. Да и английского достаточно, всё лучше голых 10058
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Сентябрь 21, 2016, 12:04 »

Если используется Qt, то проще пареной репы.. Юзай функцию qt_error_string(int errorCode)
Записан

ArchLinux x86_64 / Win10 64 bit
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Сентябрь 21, 2016, 12:34 »

Код функции qt_error_string(int errorCode)  Улыбающийся
Записан

juvf
Программист
*****
Offline Offline

Сообщений: 564


Просмотр профиля
« Ответ #7 : Сентябрь 21, 2016, 12:56 »

Если используется Qt, то проще пареной репы.. Юзай функцию qt_error_string(int errorCode)
qt_error_string() вполне подходит. и до кучи.... а как заставить qt_error_string писать на английском?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Сентябрь 21, 2016, 13:55 »

Наверное, никак, может смена локали поможет...
Та кто, qt_error_string использует для винды FormatMessage, т.е. открываете ссылку (или открываете исходник и смотрите в qglobal.cpp), которую приводил, копируете функцию, меняете флаг в FormatMessage на нужный вам и используете
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.221 секунд. Запросов: 22.