Ответ 1
Это ошибка WinINet, поэтому связанное с ней сообщение находится в WinINet.dll. Вам просто нужно сообщить FormatMessage() об этом, чтобы получить правильное сообщение:
FormatMessage(
// flags:
FORMAT_MESSAGE_ALLOCATE_BUFFER // allocate buffer (free with LocalFree())
| FORMAT_MESSAGE_IGNORE_INSERTS // don't process inserts
| FORMAT_MESSAGE_FROM_HMODULE, // retrieve message from specified DLL
// module to retrieve message text from
GetModuleHandle(_T("wininet.dll")),
// error code to look up
errCode,
// default language
0,
// address of location to hold pointer to allocated buffer
(LPTSTR)&lpMsgBuf,
// no minimum size
0,
// no arguments
NULL );
Это официально зарегистрировано в MSDN в разделе "Обработка ошибок" документации WinINet.
Обратите внимание, что вы можете добавить флаг FORMAT_MESSAGE_FROM_SYSTEM
, если вы хотите использовать эту подпрограмму для ошибок, которые могут появляться или не появляться из WinINet: с этим флажком, FormatMessage()
будет возвращаться к системному сообщению если ошибка не найдена в wininet.dll. Однако не удалять флаг FORMAT_MESSAGE_IGNORE_INSERTS.