C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 51 - Сообщение об ошибке GetLastError / С++ Builder 5 / Borland C++

Шаг 51 - Сообщение об ошибке GetLastError

Вообще-то это относится скорее к WinAPI, чем к VCL. Но в следующем шаге будут рассмотрены функции API, для которых подобная функция нужна

Эта функция используется обычно в сочетании с FormatMessage. Подробное описание последней займет довольно много места. Возьмем простой и реальный пример использования - функцию, выводящую последнее сообщение об ошибке, скажем, как AnsiString. И назовем ее... AnsiLastError.

AnsiString AnsiLastError(void)
{
void* cstr;
FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &cstr,
    0,
    NULL
);
String res((char*)cstr);
LocalFree(cstr);
return res;
}

Инструкция LocalFree используется здесь для освобождения памяти, занятой под буфер. Как пример использования подобной функции - ошибочный вызов API-функции FloodFill:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	FloodFill(0,0,0,0);
	Application->MessageBox(AnsiLastError().c_str(),"Error",MB_OK);
}

Здесь вызов функции неправилен, потому что первым параметром должен идти handle канвы, контекст устройства. Ну а NULL не особенно под это подходит. Поэтому при нажатии на кнопку выйдет окошко:

gif/51_1.gif (1045 b)

Причем на русском языке! Это, правда, у меня в региональных настройках стоит Russian, может, у кого Japanese или Africaans стоит, не знаю :). В виде, приведенном выше, эта функция дает ошибку в языке по умолчанию. Макрос MAKELANGID (вернее, это Windows поддерживает, а макрос только к LANGID преобразует) поддерживает около 44 языков (если я правильно посчитал) и еще суб-языки с разным написанием, типа кириллица-латиница.

В следующем шаге будет быстрый вариант конвертера из шага 50.


| |
Автор Аванесов Самвел.
[AD]