Error Lookup использует функцию FormatMessage. Мы тоже можем ее использовать в своих программах. Вот ее параметры:
DWORD FormatMessage( DWORD dwFlags, // опции LPCVOID lpSource, // источник сообщения DWORD dwMessageId, // идентификатор ошибки DWORD dwLanguageId, // идентификатор языка LPTSTR lpBuffer, // буфер сообщения DWORD nSize, // максимальный размер буфера va_list *Arguments // массив сообщений );
Давайте переделаем прошлый шаг, чтобы самостоятельно получить сообщение об ошибке.
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
void main()
{
if (MoveWindow(NULL,1,1,20,20,TRUE)!=TRUE)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL
);
cout << (char*)lpMsgBuf << endl;
}
}
Смотрим результат.

Отлично. Как это работает понятно. Но не все так просто. В шаге "Шаг 44 - Обработка ошибок COM - HRESULT" я упоминал, что код ошибки хранится в kernel32.dll. Но это не совсем так, то есть не только там.