Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c