Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вызвать процедуру по указателю на неё? [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 варианты рассматриваем?


Наверх

Титульная страница Поиск, карта сайта Написать письмо