Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Ishodniki.Ru » Online книги » C++ Builder по шагам Шаг 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 не особенно под это подходит. Поэтому при нажатии на кнопку выйдет окошко: Причем на русском языке! Это, правда, у меня в региональных настройках стоит Russian, может, у кого Japanese или Africaans стоит, не знаю :). В виде, приведенном выше, эта функция дает ошибку в языке по умолчанию. Макрос MAKELANGID (вернее, это Windows поддерживает, а макрос только к LANGID преобразует) поддерживает около 44 языков (если я правильно посчитал) и еще суб-языки с разным написанием, типа кириллица-латиница. В следующем шаге будет быстрый вариант конвертера из шага 50. |
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь Рейтинги
|