Шаг 33 - Как работает Error Lookup

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;
	}
}

Смотрим результат.

33_1.gif (2693 b)

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.