Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
Б   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.059 c
15-1273133676
Студент_404
2010-05-06 12:14
2010.08.27
Как устроены классы?


2-1266177784
Дмитрий
2010-02-14 23:03
2010.08.27
алиасы в FB_embedded 2.1


15-1272036312
@!!ex
2010-04-23 19:25
2010.08.27
Как получить повышенные привилегии в Vista?


15-1266101457
Германн
2010-02-14 01:50
2010.08.27
Delphi - "рулез форева"!


15-1270388228
Дмитрий С
2010-04-04 17:37
2010.08.27
Как убрать веб браузер при загрузке delphi 2010.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский