Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов метода процедурного типа [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);

Без крышки.


Наверх

Титульная страница Поиск, карта сайта Написать письмо