Форум: "Основная";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];
ВнизКак вызвать метод объекта по указателю? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c