Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

соглашение о передаче параметров   Найти похожие ветки 

 
Stexen ©   (2006-09-18 10:05) [0]

Тут проблемма одна возникла, нашелся способ но ниочень, имхо,
вообщем допустим есть последовательность процедур main, a2,a3, a4, a5...
procedure main();
begin
  a2();
@@a_1:
  какие то действия
  выход из процедуры
end;

Процедура a2 вызывает a3, a3 ->a4, a4->a5 и тд.

Вообще каждая процедура знает адресс @@a_1, но незнает из какой процедуры вызывалась, и допустим на каком то моменте в какой то из процедур происходит ошибка(пользовательская(например файл не найден или еще что-то)), нужно не возвращаясь в предыдущие процедуры сразу прыгнуть в @@a_1.
Вот но в таком случае возникает что в стэке хранится что попало, и могут произойти различные ошибки.
Затем я подумал, что можно в стэк перед вызовом процедуры из main  пихать какую нибудь подпись например 16 байтную. а на точке @@a_1 попить до тех пор пока не достану все до подписи включительно.Вроде бы должно работать, но мне кажется что я что-то мог забыть!!!??????
Не подскажите какие возможны баги в данной ситуации, кроме совпадения подписи...


 
Курдль ©   (2006-09-18 10:07) [1]


> Затем я подумал, что можно ...

Лучше на пару-тройку месяцев отсесть от компа и почитать книжки по программированию.


 
Rouse_ ©   (2006-09-18 10:14) [2]

SEH все сделает за тебя, главное лови выход в первой процедуре, куда вернуться хочешь.


 
Stexen ©   (2006-09-18 10:18) [3]


> SEH все сделает за тебя

Где от видел про это, но не помню как и что, можешь по подробнее описать или скинуть где почитать....


 
Stexen ©   (2006-09-18 10:19) [4]


> Stexen ©   (18.09.06 10:18) [3]

а это про ислючения?


 
Юрий Зотов ©   (2006-09-18 10:21) [5]

> Stexen ©   (18.09.06 10:05)  

procedure main();
begin
 try
   a2();
 except
   какие то действия
 end    
end;

А в процедурх a2, a3, a4, a5 и т.д. нужно просто возбудить исключение.


 
Stexen ©   (2006-09-18 10:22) [6]


> SEH все сделает за тебя

Так если например сделать так и вызввать деление на ноль он прыгнет на точку которую я пушил, а стэк этот метод очистит?


 
Stexen ©   (2006-09-18 10:25) [7]


> А в процедурх a2, a3, a4, a5 и т.д. нужно просто возбудить
> исключение

отлично, что то туплю...


> Лучше на пару-тройку месяцев отсесть от компа и почитать
> книжки по программированию

Ты прав :))))))


 
Rouse_ ©   (2006-09-18 12:12) [8]

Угу, SEH - structured exception handling


 
evvcom ©   (2006-09-19 08:44) [9]

А при чем здесь "соглашение о передаче параметров"?


 
Anatoly Podgoretsky ©   (2006-09-19 09:12) [10]


> А при чем здесь "соглашение о передаче параметров"?

Может на что сгодится


 
Stexen ©   (2006-09-19 09:55) [11]


> А при чем здесь "соглашение о передаче параметров"?

Ну изначально хотел самостоятельно стэк чистить, вот и хотел узнать что там говорится поподробнее, а то забыл, а вообще оно по-моему называется соглашение о связи. Почему связи не понимаю, наверное связи между подпрограммами


 
Anatoly Podgoretsky ©   (2006-09-19 10:00) [12]


> а вообще оно по-моему называется соглашение о связи.

Больше не читай книги этих переводчиков.


 
Stexen ©   (2006-09-19 10:01) [13]


> Больше не читай книги этих переводчиков

:)



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.071 c
5-1140527217
De
2006-02-21 16:06
2006.10.08
Куда и как разместить свою иконку для создаваемого компонента?


15-1158572328
ПЛОВ
2006-09-18 13:38
2006.10.08
Подскажите С++ аналог Делфи-ф-ции FRAC


15-1158243464
iamdanil
2006-09-14 18:17
2006.10.08
Как сохранить ьекстовый файл на сониериксон к300?


2-1158514780
Doblclick
2006-09-17 21:39
2006.10.08
Как в Richedit вставить strings?


2-1158848258
Касабланка
2006-09-21 18:17
2006.10.08
Pascal