Главная страница
    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.106 c
6-1223380302
gaux
2008-10-07 15:51
2010.08.27
Indy 10.1.5 + SSL. Получить код ошибки OpenSSL в OnVerifyPeer


15-1265361958
Ghost
2010-02-05 12:25
2010.08.27
Nokia 3110c передача *.txt по синезубу


15-1269034206
Юрий
2010-03-20 00:30
2010.08.27
С днем рождения ! 20 марта 2010 суббота


2-1270313219
АнатолийПа
2010-04-03 20:46
2010.08.27
Транспортная


2-1272946931
Rail
2010-05-04 08:22
2010.08.27
компоненты





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский