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

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

VMT


nomshar ©   (2004-08-26 12:26:00) 

Слышал, что методы класса можно вызывать на основе смещения по адресу в таблице виртуальных методов. Господа, подскажите, как это сделать. Либо, где начать копать.


Семен Сорокин   (2004-08-26 12:41:00) [1]

http://www.delphimaster.ru/articles/callprivate/index.html


Анонимщик   (2004-08-26 12:41:00) [2]

nomshar

Хотя все господа в Париже, все-таки отвечу.

var
 pNew: Pointer;
begin
 with ClassInfo_SG do
 begin
   Cells[0, 0] := 'ЭЛЕМЕНТ';
   Cells[1, 0] := 'СМЕЩЕНИЕ';
   Cells[2, 0] := 'ЗНАЧЕНИЕ';
   Cells[0, 1]  := 'УКАЗАТЕЛЬ НА ТАБЛИЦУ ВИРТУАЛЬНЫХ МЕТОДОВ';
   Cells[0, 2]  := 'УКАЗАТЕЛЬ НА ТАБЛИЦУ ИНТЕРФЕЙСОВ';
   Cells[0, 3]  := 'УКАЗАТЕЛЬ НА ТАБЛИЦУ АВТОМАТИЗАЦИИ';
   Cells[0, 4]  := 'УКАЗАТЕЛЬ НА ТАБЛИЦУ ИНИЦИАЛИЗАЦИИ ЭКЗЕМПЛЯРОВ';
   Cells[0, 5]  := 'УКАЗАТЕЛЬ НА ТАБЛИЦУ ТИПОВ ИНФОРМАЦИИ';
   Cells[0, 6]  := 'УКАЗАТЕЛЬ НА ТАБЛИЦУ ОПРЕДЕЛЕНИЙ ПОЛЕЙ';
   Cells[0, 7]  := 'УКАЗАТЕЛЬ НА ТАБЛИЦУ ОПРЕДЕЛЕНИЙ МЕТОДОВ';
   Cells[0, 8]  := 'УКАЗАТЕЛЬ НА ТАБЛИЦУ ДИНАМИЧЕСКИХ МЕТОДОВ';
   Cells[0, 9]  := 'УКАЗАТЕЛЬ НА SHORTSTRING, СОДЕРЖАЩУЮ ИМЯ КЛАССА';
   Cells[0, 10] := 'РАЗМЕР ЭКЗЕМПЛЯРА В БАЙТАХ';
   Cells[0, 11] := 'УКАЗАТЕЛЬ НА УКАЗАТЕЛЬ КЛАССА-ПРАРОДИТЕЛЯ';
   Cells[0, 12] := 'УКАЗАТЕЛЬ НА ТОЧКУ ВХОДА МЕТОДА SafecallException';
   Cells[0, 13] := 'УКАЗАТЕЛЬ НА ТОЧКУ ВХОДА МЕТОДА AfterConstruction';
   Cells[0, 14] := 'УКАЗАТЕЛЬ НА ТОЧКУ ВХОДА МЕТОДА BeforeDestruction';
   Cells[0, 15] := 'УКАЗАТЕЛЬ НА ТОЧКУ ВХОДА МЕТОДА Dispatch';
   Cells[0, 16] := 'УКАЗАТЕЛЬ НА ТОЧКУ ВХОДА МЕТОДА DefaultHandler';
   Cells[0, 17] := 'УКАЗАТЕЛЬ НА ТОЧКУ ВХОДА МЕТОДА NewInstance';
   Cells[0, 18] := 'УКАЗАТЕЛЬ НА ТОЧКУ ВХОДА МЕТОДА FreeInstance';
   Cells[0, 19] := 'УКАЗАТЕЛЬ НА ТОЧКУ ВХОДА МЕТОДА Destroy';
 end;

 basePointer := TButton; // или, например, Button1
 for count := 0 to 19 do
 begin
  pNew := Pointer(Integer(basePointer) - (76 - 4*count));
  ClassInfo_SG.Cells[2, 1 + count] := IntToStr(Integer(pNew^));
 end;

 дальше идут точки входа в user-define функции


Skier   (2004-08-26 12:29:00) [3]

>nomshar   (26.08.04 12:26)  
А зачем сие ?


default   (2004-08-26 12:28:00) [4]

в окне CPU посмотреть...


Наверх

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