Главная страница
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.23 c
2-1271699684
SyrBrandon
2010-04-19 21:54
2010.08.27
Как сделать чтобы в объекте TEdit вводились тока латинские буквы


15-1266400634
Омлет
2010-02-17 12:57
2010.08.27
Шапка счастья или шлем ужаса?


3-1243590436
gog
2009-05-29 13:47
2010.08.27
Прочитать unicode данные из Oracle


2-1273563415
Uzer2010l
2010-05-11 11:36
2010.08.27
Коллизия обработчиков


15-1268343005
Юрий
2010-03-12 00:30
2010.08.27
С днем рождения ! 12 марта 2010 пятница