48 выпуск
Клуб | Лабораторные работы | Справочники | Книги | Статьи | Архив рассылки | Форум | Основы Delphi | Блог |
|
Клуб программистов | |
чета поздно :) выпуск 48 | |
От редактора | |
Да, да... можете меня ругать. Я забыл выпустить рассылку на прошлой неделе. Теперь вот в среду выпускаю номер 48... Следующий выпуск будет наверно в понедельник на следующей неделе. А сегодня в выпуске: интервью с нашим любимым админом Alar' ом, а также статья в Московском журнале "Куда пойти учиться", от rpy3uH ' а урок об обратке исключений в Delphi и еще немного юмор. Удачи вам! |
|
Профессия программист - Журнал “куда пойти учиться” | |
Интервью у: Alat . Читаем здесь: http://pblog.ru/?p=88 |
|
Обработка исключений в Delphi | |
Здравствуйте уважаемые
«дельфисты» и им сочувствующие. Сегодня я вам расскажу про обработку
исключений в программах на Delphi. Техника, описанная мной позволяет почти
полностью контролировать выполнение сомнительного кода, который может и не
сработать в самый критичный момент. Данная статья в первую очередь
ориентирована на «чайников».
Начнём сначала (это низкоуровневая часть этой статьи, кому не интересно тот может не читать). В Windows исключения обрабатываются с помощью техники SEH. Расшифровывается она так – Structured Exception Handling, т.е. структурированная обработка исключений. Суть её вот в чём. У каждого процесса в некоторой области памяти (обычно она указывается сегментным регистром fs) находится связанный список, в каждом элементе которого содержатся по два указателя: один указывает на обработчик исключения, второй указывает на следующий элемент. Таким образом, получается цепочка указателей обработчики (первый элемент находится по адресу [fs]:0). При возникновении исключения (например: деление на ноль, обращение к несуществующей (невыделенной) памяти, неправильная операция над числами, неверное преобразование и т.д.) вызывается первый обработчик, он может обработать исключение и вернуть результат EXCEPTION_CONTINUE_EXECUTION т.е. «всё нормально», или если оно не может его обработать или оно предназначено для обработки других исключений оно возвращает результат EXCEPTION_CONTINUE_SEARCH, то управление будет передано следующему обработчику и так до тех пор, пока исключение не будет обработано (если уж никто не смог обработать исключение, то я думаю, последний обработчик додумается завершить приложение). Теперь ближе к делу. В Delphi техника SEН реализуется с помощью блока try…except/finally…end. Общий формат этих блоков такой:
try
В втором случае видно что в цепочку обработчиков SEH будет добавлен пустой обработчик, а в первом случае в цепочку обработчиков будет добавлен указатель на блок except…end. В блоке, который следует после except можно обработать исключение, можно просто вывести сообщение об ошибке, а можно и ничего не делать. При возникновении ошибки в основном блоке управление сразу же передаётся коду, который находится в блоке except. Код, который находится после строки, которая вызвала исключение не выполнится. Если основной код слишком большой, и могут возникать различные ошибки, то можно с помощью блока on…do узнать какое именно исключение произошло. Например:
try
или можно воспользоваться уже существующим классом, например raise EZeroDivide.Create(’текст’); Информацию о классах исключений можно получить, набрав в справке Delphi «VCL exception classes» (там конечно не все, но для начала хватит). Следует подметить, что ошибки можно обработать только в стандартных функциях Delphi, ошибки в API функциях нельзя отловить с помощью блоков try. У API функций есть свой способ узнать об ошибке или генерировать ошибки – это API функции Set/GetLastError. Вот наверно и всё. Это был rpy3uH , специально для “ Клуб программистов ”. |
|
Немного юмора | |
Беседуют два программиста:
- Чем отличается программист от обычного человека? - Программист может ответить на вопрос, в котором уже заключен ответ. - Это как? - Ну, например, ответь на вопрос: сколько будет 2+2=4? - TRUE. * * * Решил хакеp стать поваpом. Пошел блины печь. Пеpвый блин у него, как водится, комом вышел. Hу а втоpой - экзешником! * * * - Я тут с такой девушкой познакомился... Отпад! 90-60-90!!! - Круто... Откуда у нее шестизначная аська?!! * * * Программист глубокой ночью за компом чувствует прикосновение сзади. Оборачивается - жена стоит голышом, обворожительно-нежно на него смотрит. Программист: - Извини, милая, но комп занят... * * * Первый день. Запустили все программы и отформатировали все дискеты. Второй день. Запустили все утилиты и отформатировали все винчестеры. Третий день. Запустили все, что грузится, и отформатировали все, что крутится. Четвертый день. Приехал админ, и тут такое началось... * * * В кабинете шефа компютерщик подготавливает комп к форматированию. В это время в кабинет влетает секретарша: - Шеф спрашивает, не встречалась ли вам папка <Мусор>? Компютерщик с ужасом вспоминает, что минуту тому назад снес эту папку. Немедленно запускаются всевозможные <анерейзы>, и через полчаса он гордо докладывает вешедшему в кабинет шефу: - Шеф, я нашел ее! - Кого? - Ту папку, <Мусор>. Вы полчаса назад звонили... - Ах да! Я хотел сказать - сотри ее нафиг... * * * У программера спрашивают: - Сколько детей? - Два сына. - По сколько лет? После паузы: - Один на компе играет, а второй еще нет. * * * - Зачем в российских военкоматах окулисты показывают картинки, состоящие из множества разноцветных кружочков? Если ты дальтоник, то увидишь на картинке одно число, а если нет - другое? - Защита от автоматической регистрации ботами. * * * - Что такое "поддержка пользователей"? - А это если у пользователя вся инфа накрылась медным тазом, то ты подходишь, кладешь руку на плечо и говоришь: "Как я вас понимаю!" * * * - В мой компьютер попал вирус. - Ну и что ты сделал? - Прививку. - Куда? - Под мышку... * * *
У кнопки "Reset" есть один
недостаток:
|
|
Подписчикам рассылки | |
Ко мне на e-mail часто приходят разные письма от подписчиков с вопросами. Я всегда рад вашим письмам. присылайте вопросы, пожелания, замечания. Адрес для писем ведущему рассылки admin@welikeit.ru . |
|
Клуб | Лабораторные работы | Справочники | Книги | Статьи | Архив рассылки | Форум | Основы Delphi | Блог |