![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов метода процедурного типа [D7, XP]
Darvin © (2007-05-16 10:35:00)Мне необходимо в переменной типа pointer хранить ссылку на процедуру (метод класса), а затем вызвать эту процедуру по ссылке. Пишу так:
type
TMyMethod = procedure (A : Integer) of object;
TMyClass = class
procedure MyMethod (A : Integer);
...
end;
var
P : Pointer;
I : Integer;
begin
P := @MyMethod;
...
TMyMethod(P^) (I); <- Возникает Access violation
Как правильно решить эту задачу?
Darvin (2007-05-16 14:29:00) [1]> MBo © (16.05.07 12:02) [5]
Спасибо, работает. Не знал про такой метод....
Век живи, век учись... ;-)
MBo (2007-05-16 12:02:00) [2]var
M: TMethod;
C: TMyClass;
begin
C:= TMyClass.Create;
M.Data := C;
M.Code := @TMyClass.MyMethod;
TMyMethod(M)(5);
C.Free;
Darvin (2007-05-16 11:55:00) [3]> Плохиш © (16.05.07 11:26) [3]
Все равно AV при вызове метода
Плохиш (2007-05-16 11:26:00) [4]var tmpMethod: TMyMethod;
...
@tmpMethod := P;
tmpMethod(I);
...
Darvin (2007-05-16 10:58:00) [5]>Плохиш © (16.05.07 10:52) [1]
TMyMethod(P) (I);
\__ Invalid typecast
Плохиш (2007-05-16 10:52:00) [6]
> TMyMethod(P) (I);
Без крышки.