Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Как вызвать процедуру по указателю на неё?   Найти похожие ветки 

 
Б   (2010-04-22 00:26) [0]

Здрасти!

Как вызвать процедуру по указателю на неё?
(Не рассматриваем: Type TProc = procedure)


Procedure Proc;
begin

End;

Var
 P: Pointer;

 P:= @Proc;
 If Assigned(P) then P;          // Ошибка.



 
Германн ©   (2010-04-22 00:33) [1]

ASM варианты рассматриваем?


 
Б   (2010-04-22 00:40) [2]


> Германн ©   (22.04.10 00:33) [1]
> ASM варианты рассматриваем?


Нет.


 
Германн ©   (2010-04-22 00:55) [3]


> Б   (22.04.10 00:40) [2]

Тогда я пас.


 
Leonid Troyanovsky ©   (2010-04-22 07:40) [4]


> Б   (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 09:39) [5]

А так?


Procedure Reg(P: Pointer);
begin
 If Assigned(P) then P;   // Будем считать, что передаются только процедуры.
End;



 
Leonid Troyanovsky ©   (2010-04-22 09:51) [6]


> Б   (22.04.10 09:39) [5]

> А так?

type
 TProc=procedure;

Procedure Reg(P: TProc);

--
Regards, LVT.


 
Б   (2010-04-22 09:53) [7]

Видно от Type TProc = procedure не отделаться.
Ладно, спасибо.


 
Leonid Troyanovsky ©   (2010-04-22 09:56) [8]


> Б   (22.04.10 09:53) [7]

> Видно от Type TProc = procedure не отделаться.

Не понятно, зачем от него отделываться.

--
Regards, LVT.


 
Игорь Шевченко ©   (2010-04-22 12:53) [9]


> Не понятно, зачем от него отделываться.


В древнем Китае желающим странного отрубали голову. Весьма, надо сказать, прогрессивное решение.


 
Юрий Зотов ©   (2010-04-22 14:04) [10]

> Б   (22.04.10 00:26)  

Поставьте себя на место компилятора.

Вы видите, что переменная P объявлена программистом, как Pointer. Какой машинный код Вы должны сгенерить, если далее программист написал такую строку:
P; // Просто P и больше ничего

А ведь это НИЧЕМ не отличается от Вашего кода. Что же должен сделать бедняга компилятор?


 
icWasya ©   (2010-04-22 14:51) [11]

Кроме всего прочего, есть такое понятие как соглашение о вызове.
У процедуры могут быть параметры, которые передаются через стек и/или регистры, от параметров в стеке может избавляться вызывающая или вызываемая сторона и еще куча всего.


 
Б   (2010-04-22 19:39) [12]

Внятненько.


 
Anatoly Podgoretsky ©   (2010-04-23 07:27) [13]

> Б  (22.04.2010 09:39:05)  [5]

А так дурлрм и видимо из чувства противоречия, только бы не использовать советы.


 
Anatoly Podgoretsky ©   (2010-04-23 07:27) [14]

> Leonid Troyanovsky  (22.04.2010 09:56:08)  [8]

А потому что по нашему нельзя, не свое мол!



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

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.111 c
2-1270824084
V
2010-04-09 18:41
2010.08.27
CreateDir


15-1265621167
12
2010-02-08 12:26
2010.08.27
Кто прав? "особенность работы" и стоимость ее исправления


15-1270845004
Юрий
2010-04-10 00:30
2010.08.27
С днем рождения ! 10 апреля 2010 суббота


2-1274677239
viktooor
2010-05-24 09:00
2010.08.27
Поис в диапазоне дат


6-1217411834
Lamer666
2008-07-30 13:57
2010.08.27
Сессии HTTPS