Главная страница
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.5 MB
Время: 0.047 c
2-1269669606
NBAH1990
2010-03-27 09:00
2010.08.27
Помогите разобраться с компонентом TsListView


4-1227220571
AnarchyMob
2008-11-21 01:36
2010.08.27
Сообщение при изменении состояния контролла.


15-1272065525
Копир
2010-04-24 03:32
2010.08.27
Знаменитое предложение: Отчет об ошибке.


15-1271709002
Юрий
2010-04-20 00:30
2010.08.27
С днем рождения ! 20 апреля 2010 вторник


2-1265467771
tippa
2010-02-06 17:49
2010.08.27
моделирование логики программы