Вниз
Скачать: CL | DM;

Callback-функции   Найти похожие ветки 

 
TUser ©   (2006-04-25 12:35) [0]

Можно ли использовать локальную процедуру (функцию) в качестве call-back. Например, можно использовать такой код

type
TAAA = function (...): ...;

function AAA (...): ...; // функция типа TAAA
begin
end;

procedure BBB (Func: TAAA);
begin
 Func (...)  
end;

procedure CCC;
begin
 BBB (AAA);
end;

Хотелось бы передавать функции BBB локально объявленную процедуру (функцию). Т.е. что такое

type
TAAA = function (...): ...;

procedure BBB (Func: TAAA);
begin
 Func (...)  
end;

procedure CCC;

function AAA (...): ...; // функция почти типа TAAA
begin
end;

begin
 BBB (AAA);
end;

К сожалению, Паскаль так не умеет. Не компилирует, ибо запрещено правилами языка (incomparable types). Можно ли как-нибудь обмануть компилятор?

Компилятор - Delphi 7.


 
Сергей М. ©   (2006-04-25 12:43) [1]


> почти типа


Что значит "почти типа" ?

Паскаль таких "вольностей" не допускает ..


 
begin...end ©   (2006-04-25 12:46) [2]

> TUser ©   (25.04.06 12:35)

> BBB (AAA);

BBB (TAAA(@AAA));


 
Гаврила ©   (2006-04-25 12:52) [3]

Нельзя.


 
TUser ©   (2006-04-25 12:56) [4]

begin...end ©   (25.04.06 12:46) [2]
Точно. Спасибо.


 
evvcom ©   (2006-04-25 14:05) [5]

Через указатели и приведение типов можно обманывать компилятор, как вздумается (я уж не говорю про ассемблер). Главное - понимать, что делаешь, иначе скорее всего словишь AV.


 
jack128 ©   (2006-04-25 14:52) [6]

evvcom ©   (25.04.06 14:05) [5]
Главное - понимать, что делаешь, иначе скорее всего словишь AV.

в данном случае в 99% словишь AV.


 
jack128 ©   (2006-04-25 14:55) [7]

jack128 ©   (25.04.06 14:52) [6]
точнее так: если AAA использует локальные переменные, объявленные в ССС - то AV гарантирован..


 
evvcom ©   (2006-04-25 15:08) [8]

Ну про количество процентов (99% или 99,99% :) ) спорить не буду, т.к. вычислить его практически невозможно. А вот то, что AAA локальная функция в ССС только сейчас обратил внимание. Ну а смысла ее делать локальной без использования лок.переменных CCC тоже не вижу. Посему способ явно не гуд.


 
TUser ©   (2006-04-25 15:20) [9]

Уже наступил на эти грабли. ААА теперь глобальная, аминь.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.028 c
3-1139197590
Ольга
2006-02-06 06:46
2006.05.14
Получить значение OUTPUT параметра из хран. процедуры


2-1145838896
Bratskiy
2006-04-24 04:34
2006.05.14
Резервное копирование базы данных


9-1129620790
greg123
2005-10-18 11:33
2006.05.14
Помогите создать алгоритм генерации случайных чисел


2-1145795773
Alex7
2006-04-23 16:36
2006.05.14
TDataSet


2-1145720566
AlexanderMS
2006-04-22 19:42
2006.05.14
Разбивка текста на строчки




   Наверх