Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

Как вызвать метод объекта по указателю?   Найти похожие ветки 

 
makruha   (2003-06-21 15:05) [0]

Есть функция в которую надо передавать ссылку на методы принадлижащие объекту.
Необходимо внутри этой функции по указателю запустить метод и передать ему параметры.
Как проще это сделать? Помогите!!!!!:(


 
mrcat ©   (2003-06-21 15:09) [1]

"проще" передать объект:

function LetsQuick(Ptr: Pointer);
begin
TMyObject(Ptr).MyMethod(a,b,c);
end;


 
Digitman ©   (2003-06-21 15:16) [2]


> ссылку на методы принадлижащие объекту


это как ?


 
Armen   (2003-06-22 18:40) [3]

type
TA = class
private
....
public
....
end;

var
A: TA
begin
A:= TA.Create;
end.

Ты как думаешь, что есть A?

p.s. А это и есть указатель на объект типа A.


 
makruha   (2003-06-22 21:08) [4]

Наверное плохо объяснил. В обычной процедуре в качесте параметра
можно передавать функцию или процедуру, типа
type
TFunc=procedure(a:Extended):Extended;
...
procedure MyFunc(x:Extended;Func:TFunc);
begin
...
Func(x);
...
end;

procedure Sin(a:Extended);

procedure Cos(a:Extended);
begin
end;
.....
.....
begin
......
MyFunc(a1,sin);
......
MyFunc(a1,cos);
end;

Т.е. внутри MyFunc я могу запустить или cos или sin
Так вот c методами(процедурами, функциями)принадлижащими объектам это невыходит. Delphi не позволяет передавать метод объекат как параметр. Но можно передать указатель на этот метод.
Но тогда как запустить метод зная указатель?


 
Ученик ©   (2003-06-22 21:16) [5]

type
TFunc= procedure (a:Extended) of object;

procedure MyFunc(x:Extended;Func:TFunc);
begin
Func(x);
end;

type
TSinCos = class
procedure Sin(a:Extended);
procedure Cos(a:Extended);
end;

procedure TSinCos.Sin(a:Extended);
begin

end;

procedure TSinCos.Cos(a:Extended);
begin

end;

var
B: TSinCos;
a1: Extended;
...
MyFunc(a1, B.sin);
MyFunc(a1, B.cos);
...


 
VMcL ©   (2003-06-22 21:26) [6]

Чтобы выполнить метод (не class method) нужно в качестве одного из параметров (при соглашении register - первого) передать указатель на конкретный экземпляр класса.

Если bvttncz указатель на метод и указатель на экземпляр класса, имеющего этот метод, то можно написать что-то вроде этого:

procedure InvokeMethod(AObject, Method: Pointer); register;
asm
call edx
end;


Пример:
InvokeMethod(Self, @TForm1.BlaBla);


 
VMcL ©   (2003-06-22 21:28) [7]

Oops. "bvttncz" = "имеется" :)


 
VMcL ©   (2003-06-22 21:29) [8]

Замечание: в примере InvokeMethod подразумевается, что Method - метод-процедура класса без параметров с соглашением register (по умолчанию).


 
makruha   (2003-06-22 21:47) [9]

Ученик, ты прав!!! Я залез в Help-Delphi7 и нашел там ответ, прямо как ты написал. Но всё равно большое большое спасибо!!!
Я буду жить %)



Страницы: 1 вся ветка

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
1-7502
Alexey
2003-06-21 12:32
2003.07.03
Отчеты из Quickreport в Word


14-7595
Zergling
2003-06-17 06:47
2003.07.03
Русский набор символов в Rave Report


1-7529
noteens
2003-06-09 20:25
2003.07.03
Word+Delphi


14-7712
SiJack
2003-06-17 14:00
2003.07.03
Не могу сочинять хелпы, ОТМОРАЖИВАЮСЬ !!!


1-7484
Evil_forever
2003-06-19 23:52
2003.07.03
---|Ветка была без названия|---