Форум: "Начинающим";
Текущий архив: 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.057 c