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. Но это не совсем так, то есть не только там.