Магнетон Бора
ЖИЗНЬ - БАЯН
Cтудент
Карма: +1/-0
Offline
Пол:
Сообщений: 61
|
|
« : Сентябрь 11, 2008, 04:00:42 » |
|
В сфере недавних событий появилась одна маленькая, но весьма маленькая проблемка: в любой программе учебной, научной и т.п. могут возникать исключительные ситуации, которые необходимо обрабатывать. Такие ситуации в С++ обрабатываются с помощью генерации исключений, для этого используются операторы throw, catch и т.д. А теперь, уважаемые, знатоки, внимание вопрос: "Почему эти операторы никак не хотят работать в среде Borland C3.1? Операторы выделяются белым цветом, как положено, но при компиляции программы вылезают ошибки, связанные с использованием этих самых операторов." ЗЫ: Просьба не предлагать сменить среду на другую, нужна именно эта.
|
|
|
Записан
|
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #1 : Сентябрь 11, 2008, 04:01:46 » |
|
Извини, друг, но ответ на твой вопрос "потому что надо сменить среду, так как в этой версии обработка исключений не реализована"
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
Магнетон Бора
ЖИЗНЬ - БАЯН
Cтудент
Карма: +1/-0
Offline
Пол:
Сообщений: 61
|
|
« Ответ #2 : Сентябрь 11, 2008, 04:08:31 » |
|
Извини, друг, но ответ на твой вопрос "потому что надо сменить среду, так как в этой версии обработка исключений не реализована" Нак какую среду ее поменять лучше всего? Моё задаие предполагает построение графиков, пользовательского интерфейса и т.п. В билдере, я так понимаю исключение работают, но там не получается использовать графические функции Borland C 3.1. Как же теперь быть?
|
|
|
Записан
|
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #3 : Сентябрь 11, 2008, 04:16:59 » |
|
Магнетон Бора, а какой интерфейс и графики в прогой под DOS, и плюс на висте незапашет.
|
|
|
Записан
|
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #4 : Сентябрь 11, 2008, 04:18:34 » |
|
Извини, друг, но ответ на твой вопрос "потому что надо сменить среду, так как в этой версии обработка исключений не реализована" Нак какую среду ее поменять лучше всего? Моё задаие предполагает построение графиков, пользовательского интерфейса и т.п. В билдере, я так понимаю исключение работают, но там не получается использовать графические функции Borland C 3.1. Как же теперь быть? Если нужна BGI-графика, то единственный выход - не обрабатывать исключения.
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
Магнетон Бора
ЖИЗНЬ - БАЯН
Cтудент
Карма: +1/-0
Offline
Пол:
Сообщений: 61
|
|
« Ответ #5 : Сентябрь 11, 2008, 04:23:55 » |
|
Магнетон Бора, а какой интерфейс и графики в прогой под DOS, и плюс на висте незапашет. Виста меня интересуют сейчас меньше всего, а большего всего - курсовой проект, в котором пользовательский интерфейс и графики функций необходимо реализовывать вручную. ( Отправлено в: Сентябрь 11, 2008, 04:21:50 ) Если нужна BGI-графика, то единственный выход - не обрабатывать исключения. Т.е. просто вместе генерации исключений ставить кучу проверок и тем самым портить полезный код ?
|
|
|
Записан
|
|
|
|
artri
Cтудент
Карма: +1/-0
Offline
Сообщений: 85
artri@jabber.ru
|
|
« Ответ #6 : Сентябрь 11, 2008, 04:30:04 » |
|
Когда-то такая проблема стояла применительно к Borland Pascal 7.0. Решение было найдено в одной из книг Фаронова. Точно уже не помню, но где-то так: т.к. адрес текущей инструкции сохраняется в паре регистров ЦП CS:IP, предлагалось где-то сохранять значение этих регистров, после чего переопределялась стандартная функция паскаля, вызываемая при возникновении исключения, в которой для регистров CS:IP устанавливалось сохраненное значение. Этот подход был когда-то использован в курсовой работе по программированию. Оно даже работало :-D Думаю, что реализовать нечто похожее можно и в Borland C3.1. Если интересно, могу выложить модуль на паскале с примерами использования
|
|
|
Записан
|
oDesk Certified Java Developer - Телепатический локатор, - пояснил Петрович, вытирая руки ветошью.- Основной инструмент аналитика, позволяющий напрямую извлекать технические требования из головы заказчика. (с) Трое в серверной, не считая админа. Глава 8. Тестеры и аналитики
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #7 : Сентябрь 11, 2008, 04:31:24 » |
|
Увы. Или забить на графику BGI и пользоваться примитивными функциями рисования WinAPI (рисовать линии, выводить шрифт, делать заливку). BGI была дана чтобы освоить принципы. Если освоил, то разберешься и с рисованием примитивов в других библиотеках. artri, только чтобы это заработало минимум в хрюнделе и он смог защитить при сдаче ИМХО, рано ему до подходов с модификацией Instruction Pointer.
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
Alder
|
|
« Ответ #8 : Сентябрь 11, 2008, 04:34:22 » |
|
artri, кстати да. Я тоже так делал в свое время Ничего там сложного нету. Выложи им примерчик.
|
|
|
Записан
|
"There are things known and there are things unknown, and in between are the doors..." (Jim Morrison)
|
|
|
artri
Cтудент
Карма: +1/-0
Offline
Сообщений: 85
artri@jabber.ru
|
|
« Ответ #9 : Сентябрь 11, 2008, 04:37:53 » |
|
artri, только чтобы это заработало минимум в хрюнделе и он смог защитить при сдаче ИМХО, рано ему до подходов с модификацией Instruction Pointer. EvilMax, ИМХО, если сильно нужно именно там, где инструментария нормального нет, то можно и Instruction Pointer модифицировать.
|
|
|
Записан
|
oDesk Certified Java Developer - Телепатический локатор, - пояснил Петрович, вытирая руки ветошью.- Основной инструмент аналитика, позволяющий напрямую извлекать технические требования из головы заказчика. (с) Трое в серверной, не считая админа. Глава 8. Тестеры и аналитики
|
|
|
Магнетон Бора
ЖИЗНЬ - БАЯН
Cтудент
Карма: +1/-0
Offline
Пол:
Сообщений: 61
|
|
« Ответ #10 : Сентябрь 11, 2008, 04:41:52 » |
|
EvilMax, спасибо за совет, буду юзать карсовой без генерации исключений. :-) (Отправлено в: Сентябрь 11, 2008, 04:39:59 ) artri, чисто ради спортивного интереса покажи этот примерчик, и объясни по-подробнее )))
|
|
|
Записан
|
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #11 : Сентябрь 11, 2008, 04:42:22 » |
|
artri, если не сложно выложи пожалуйста примерчик. ИУС-07, и я в том числе, будем тебе благодарны
|
|
|
Записан
|
|
|
|
artri
Cтудент
Карма: +1/-0
Offline
Сообщений: 85
artri@jabber.ru
|
|
« Ответ #12 : Сентябрь 11, 2008, 05:10:49 » |
|
Модуль диагностики: Unit diagnost;
INTERFACE
Uses crt,us;
type jumprec=record spsave,bpsave:word; jmpptr:pointer; end;
Var oldexit:pointer; jumping:jumprec;
procedure userexit;far;
procedure setjmp(var jmpdest:jumprec); InLine($5F/$26/$89/$25/$26/$89/ $6D/$02/$E8/$00/$00/$58/$05/$0C/$00/$26/$89/$45/$04/$26/$8C/$4D/$06);
procedure longjmp(var jmpdest:jumprec); inline($5F/$07/$26/$8B/$25/$26/$8B/$6D/$02/$26/$FF/$6D/$04);
IMPLEMENTATION
{процедура наш обработчик исключительных ситуаций} procedure userexit; Const w3:word=1811; w4:word=2875; var txt:string;
begin case exitcode of 1:txt:='Неверный номер функции'; 2:txt:='Не найден файл'; 3:txt:='Не найден путь'; 100:txt:='Ошибка чтения с диска'; 101:txt:='Ошибка записи на диск'; 106:txt:='Неверный числовой формат'; 150:txt:='Диск защищен от записи'; 152:txt:='Не готов диск'; 154:txt:='Ошибка в исходных данных'; 200:txt:='Деление на ноль'; 202:txt:='Переполнение стека'; 203:txt:='Переполнение кучи'; 205:txt:='Переполнение при операции с плавающей запятой'; 206:txt:='Исчезновение порядка при операции с плавающей запятой'; 207:txt:='Недопустимая операция с плавающей запятой'; else txt:=' Ошибка процесса '; end;{case}
{показываем сообщение об ошибке в отдельном окошке} rame(19,7,61,13,15,4,' ! ОШИБКА ! '); window(lo(w3)+1,hi(w3)+1,lo(w4)+1,hi(w4)+1); textbackground(red); textcolor(white); clrscr; setnocursor; writeln(txt); writeln('Нажмите любую клавишу для продолжения'); window(lo(w1)+1,hi(w1)+1,lo(w10)+1,hi(w10)+1); readkey;
{удаляем временные файлы, восстанавливаем стандартные настройки окружения} go_out;
{здесь выполняется переход на сохраненную точку} exitcode:=0; erroraddr:=nil; longjmp(jumping); end;
{********************************************}
END.
Пример использования: Program main; uses meny,textin,dos,crt,us,diagnost; var casing,n:byte; s1,s2,total_s:string; epsilon:real; icount:integer; begin
{здесь создаем точку сохранения состояния} setjmp(jumping); casing:=10; exitproc:=@userexit;
{здесь выполняется какой-то код} repeat menu(casing); menu_process(casing); until (casing=253)or(casing=50);
{здесь восстанавливаем стандартный обработчик ошибок} exitproc:=nil; end.
Где-то так, кстати, для Borland C 3.1 возможно надо будет инлайн коды переписать, т.к. насколько я помню там как-то хитро состояние регистров из стека извлекается
|
|
« Последнее редактирование: Сентябрь 11, 2008, 05:25:04 от artri »
|
Записан
|
oDesk Certified Java Developer - Телепатический локатор, - пояснил Петрович, вытирая руки ветошью.- Основной инструмент аналитика, позволяющий напрямую извлекать технические требования из головы заказчика. (с) Трое в серверной, не считая админа. Глава 8. Тестеры и аналитики
|
|
|
Alder
|
|
« Ответ #13 : Сентябрь 11, 2008, 05:21:26 » |
|
artri, слегка подправил пост - русские сообщения видны теперь. Да, я тоже так делал По-моему достаточно простой для понимания способ.
|
|
|
Записан
|
"There are things known and there are things unknown, and in between are the doors..." (Jim Morrison)
|
|
|
artri
Cтудент
Карма: +1/-0
Offline
Сообщений: 85
artri@jabber.ru
|
|
« Ответ #14 : Сентябрь 11, 2008, 05:26:02 » |
|
artri, слегка подправил пост - русские сообщения видны теперь. Да, я тоже так делал По-моему достаточно простой для понимания способ. Ага, особенно inline инструкции
|
|
|
Записан
|
oDesk Certified Java Developer - Телепатический локатор, - пояснил Петрович, вытирая руки ветошью.- Основной инструмент аналитика, позволяющий напрямую извлекать технические требования из головы заказчика. (с) Трое в серверной, не считая админа. Глава 8. Тестеры и аналитики
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #15 : Сентябрь 11, 2008, 05:52:02 » |
|
artri, спс за код, буду разбирать.
|
|
|
Записан
|
|
|
|
zer_owlet
Необычные пользователи
Проректор
Карма: +103/-16
Offline
Пол:
Сообщений: 2399
|
|
« Ответ #16 : Сентябрь 11, 2008, 10:22:55 » |
|
кстати, по поводу "рано" -- Мокрый это давал на 1-м курсе..... и в паскале его пример работал на ура... знаю, потому что делал на 5-м курсе курсовой для какого-то 1-курсника и там надо было ))
|
|
|
Записан
|
Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили. Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит.. Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #17 : Сентябрь 11, 2008, 11:18:35 » |
|
кстати, по поводу "рано" -- Мокрый это давал на 1-м курсе..... и в паскале его пример работал на ура... знаю, потому что делал на 5-м курсе курсовой для какого-то 1-курсника и там надо было ))
Хм. Наверное, я перваков недогружаю Сделаю выводы. Поставим цель, чтобы "средний студент" не только там дизайнил ОО-софт, но и мог наваять по-шурику обработку исключительных ситуаций с инлайн-кодом
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
FazU
|
|
« Ответ #18 : Сентябрь 11, 2008, 11:29:45 » |
|
я перваков недогружаю Смеющийся все перваки идите в деканат! вам пора....
|
|
|
Записан
|
|
|
|
zer_owlet
Необычные пользователи
Проректор
Карма: +103/-16
Offline
Пол:
Сообщений: 2399
|
|
« Ответ #19 : Сентябрь 12, 2008, 04:24:36 » |
|
кстати, по поводу "рано" -- Мокрый это давал на 1-м курсе..... и в паскале его пример работал на ура... знаю, потому что делал на 5-м курсе курсовой для какого-то 1-курсника и там надо было ))
Хм. Наверное, я перваков недогружаю Сделаю выводы. Поставим цель, чтобы "средний студент" не только там дизайнил ОО-софт, но и мог наваять по-шурику обработку исключительных ситуаций с инлайн-кодом помню как разговаривал с некоторыми преподавателями на тему обработки прерываний -- дык для них пример Мокрого тоже был новостью )) однако, пример работал отлично
|
|
|
Записан
|
Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили. Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит.. Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
|
|
|
|