Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

замена или переопределение процедуры   Найти похожие ветки 

 
vasa777   (2012-07-30 10:48) [0]

есть некий юнит abc.pas с множеством процедур и функций X0..Xn вида

Procedure X0;
begin
try
<тут что то делаем>
except on e:exception do Y(e);
end
end;

....

Procedure Xn;
begin
try
<тут что то делаем>
except on e:exception do Y(e);
end
end;

Где Y(e) процедура в этом же модуле, предназначена для обработки ошибок

Procedure Y(e:exception);
begin
<тут чтото делаем, например пишем в лог или выводим E.message>
end;

Модуль abc компилируется и передается вторичному разработчику (например) без исходного кода (только dcu).

Вопрос: может ли вторичный разработчик переопределить свою процедуру Y(e)? Или что надо сделать в модуле abc чтобы такая возможность была? Вариант с глобальным переопределением класса ошибки не интересен.
Или может быть можно сделать как то так:

Procedure Y(const e:exception;const MyProc:Procedure=nil);
begin
if assigned(MyProc) then begin // вызов процедуры MyProc
>>> как вызвать MyProc(e)? <<<
exit;
end;
//стандартная обработка
<тут чтото делаем, например пишем в лог или выводим E.message>
end;

Подскажите решение, если можно с примером. Спасибо.


 
Ega23 ©   (2012-07-30 10:53) [1]

type
TExceptionHandlerProc = procedure (E: Exception);

procedure Foo(E: Exception; Handler: TExceptionHandlerProc);
begin
 if Assigned(Handler) then
   Handler(E);
end;


 
vasa777   (2012-07-30 11:06) [2]

т.е. если я напишу в abc.pas

type
TExceptionHandlerProc = procedure (E: Exception);

procedure Foo(E: Exception; Handler: TExceptionHandlerProc);
begin
if Assigned(Handler) then
  Handler(E) else showmessage(e.message);
end;

Procedure X0;
begin
try
<тут что то делаем>
except on e:exception do Foo(e,nil);
end;
end;

то как мне в юните abc2.pas описать свою процедуру-замену стандартной

unit abc2;
...
uses abc;

type
TExceptionHandlerProc = procedure (E: Exception);

Procedure MyNewErrProc(e:exception);
begin
..
end;

<как тут описать процедуру (или вызов) чтобы при обработке ошибки в abc\X0 работала тутошняя MyNewErrProc а не вызывалось showmessage из abc\Foo?>


 
vasa777   (2012-07-30 11:09) [3]

что то запутался совсем


 
icWasya ©   (2012-07-30 11:49) [4]

Как-то так

unit abc;
interface

type
TabcExceptionHandlerProc = procedure (E: Exception);

var abcExceptionHandlerProc:TabcExceptionHandlerProc;
Procedure X0;
Procedure X1;
Procedure X2;
...
Procedure XN;

implementation
Procedure X0;
begin
try
<тут что то делаем>
except on e:exception do Y(e);
end
end;

....

Procedure Xn;
begin
try
<тут что то делаем>
except on e:exception do Y(e);
end
end;

Где Y(e) процедура в этом же модуле, предназначена для обработки ошибок

Procedure Y(e:exception);
begin
if Assigned (abcExceptionHandlerProc) then begin
 abcExceptionHandlerProc(e);
 Exit;
end;
<тут чтото делаем, например пишем в лог или выводим E.message>
end;
end.


 
vasa777   (2012-07-30 12:21) [5]

а в abc2.pas

TabcExceptionHandlerProc:= MyNewErrProc;

?


 
Плохиш ©   (2012-07-30 12:36) [6]

Без "T"


 
vasa777   (2012-07-30 12:47) [7]

спасибо



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

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.087 c
8-1225970127
Voffka
2008-11-06 14:15
2013.03.22
Кнопки управления окном


2-1328170170
AV
2012-02-02 12:09
2013.03.22
Запрос к MSSSQL не возвращает данные. Почему?


4-1262526782
Дмитрий
2010-01-03 16:53
2013.03.22
Как изменить привилегии у процесса?


2-1336066310
igorium
2012-05-03 21:31
2013.03.22
Не отображаются русские буквы в английских Виндовс


2-1343366420
EgorovAlex
2012-07-27 09:20
2013.03.22
Хранение данных в dll, используемой несколькими процессами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский