![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вызвать процедуру по указателю на неё? [D7, XP]
Б © (2010-04-22 00:26:00)Здрасти!
Как вызвать процедуру по указателю на неё?
(Не рассматриваем: Type TProc = procedure)
Procedure Proc;
begin
End;
Var
P: Pointer;
P:= @Proc;
If Assigned(P) then P; // Ошибка.
Anatoly Podgoretsky (2010-04-23 07:27:00) [1]> Б (22.04.2010 09:39:05) [5]
А так дурлрм и видимо из чувства противоречия, только бы не использовать советы.
Anatoly Podgoretsky (2010-04-23 07:27:00) [2]> Leonid Troyanovsky (22.04.2010 09:56:08) [8]
А потому что по нашему нельзя, не свое мол!
Б (2010-04-22 19:39:00) [3]Внятненько.
icWasya (2010-04-22 14:51:00) [4]Кроме всего прочего, есть такое понятие как соглашение о вызове.
У процедуры могут быть параметры, которые передаются через стек и/или регистры, от параметров в стеке может избавляться вызывающая или вызываемая сторона и еще куча всего.
Юрий Зотов (2010-04-22 14:04:00) [5]> Б (22.04.10 00:26)
Поставьте себя на место компилятора.
Вы видите, что переменная P объявлена программистом, как Pointer. Какой машинный код Вы должны сгенерить, если далее программист написал такую строку:
P; // Просто P и больше ничего
А ведь это НИЧЕМ не отличается от Вашего кода. Что же должен сделать бедняга компилятор?
Игорь Шевченко (2010-04-22 12:53:00) [6]
> Не понятно, зачем от него отделываться.
В древнем Китае желающим странного отрубали голову. Весьма, надо сказать, прогрессивное решение.
Leonid Troyanovsky (2010-04-22 09:56:00) [7]
> Б (22.04.10 09:53) [7]
> Видно от Type TProc = procedure не отделаться.
Не понятно, зачем от него отделываться.
--
Regards, LVT.
Б (2010-04-22 09:53:00) [8]Видно от Type TProc = procedure не отделаться.
Ладно, спасибо.
Leonid Troyanovsky (2010-04-22 09:51:00) [9]
> Б (22.04.10 09:39) [5]
> А так?
type
TProc=procedure;
Procedure Reg(P: TProc);
--
Regards, LVT.
Б (2010-04-22 09:39:00) [10]А так?
Procedure Reg(P: Pointer);
begin
If Assigned(P) then P; // Будем считать, что передаются только процедуры.
End;
Leonid Troyanovsky (2010-04-22 07:40:00) [11]
> Б (22.04.10 00:26)
> Как вызвать процедуру по указателю на неё?
procedure TForm1.Button1Click(Sender: TObject);
var
P: procedure;
begin
P:= Proc;
If Assigned(P) then P;
end;
--
Regards, LVT.
Германн (2010-04-22 00:55:00) [12]
> Б (22.04.10 00:40) [2]
Тогда я пас.
Б (2010-04-22 00:40:00) [13]
> Германн © (22.04.10 00:33) [1]
> ASM варианты рассматриваем?
Нет.
Германн (2010-04-22 00:33:00) [14]ASM варианты рассматриваем?