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

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

Как получить инфо о property, об`явленом НЕ published?


Страницы:   1 2 3

i-am-vladko ©   (2006-09-07 19:58:00) 

Как получить инфо о property, об`явленом НЕ published, run-time?


i-am-vladko   (2006-09-08 12:10:00) [41]

как добраться к методу, без создания для него published property?


Джо   (2006-09-08 12:06:00) [42]

> [12] i-am-vladko ©   (08.09.06 12:04)
> А какой тогда может быть выход???

А какую проблему мы на данном этапе обсуждаем? запамятовал уже, мысли скачут, как блохи :)


i-am-vladko   (2006-09-08 12:04:00) [43]

Спасибо, не знал...
А какой тогда может быть выход???


Джо   (2006-09-08 12:01:00) [44]

> [10] i-am-vladko ©   (08.09.06 11:59)
> Пробую добраться к методам ;-)

Посоветую начать пробовать с чтения Справки по MethodAddress, в коей ясно написано: "Returns the address of a publishedmethod".


i-am-vladko   (2006-09-08 11:59:00) [45]

Сори, не об`яснил - моя вина ))
К проперти никак не доберешся ((
Пробую добраться к методам ;-)


Джо   (2006-09-08 11:53:00) [46]

> [7] i-am-vladko ©   (08.09.06 11:49)
> Как я понимаю, при включенной на классе директиве {$M+}
> происходит создание RTTI для published property`s. При етом
> методы, реализующие property, об`явлены в VMT. Если метод
> виртуальный, то он тоже об`является в VMT. ТОГДА ПОЧЕМУ
> НЕ РАБОТАЕТ (возвращает nil):
> TAlphObject =  class
> public
>   procedure SetID(parID : Int64); virtual;
> end;
> {...code...................}
> procedure TForm1.BitBtn1Click(Sender: TObject);
> var
>   ss : TAlphObject;
>   P : pointer;
> begin
> ss := TAlphObject.Create;
> P := ss.MethodAddress('SetID');
> end;


Для начала, давай разберемся, где в приведенном коде published property? Пока вижу только public method.


Ketmar   (2006-09-08 11:53:00) [47]

> [7] i-am-vladko ©   (08.09.06 11:49)
ну и что, что говорили о published, а сделали public? какая нам разница, property это или method? ерунда. мелочи.


i-am-vladko   (2006-09-08 11:49:00) [48]

Как я понимаю, при включенной на классе директиве {$M+} происходит создание RTTI для published property`s. При етом методы, реализующие property, об`явлены в VMT. Если метод виртуальный, то он тоже об`является в VMT. ТОГДА ПОЧЕМУ НЕ РАБОТАЕТ (возвращает nil):
TAlphObject =  class
public
   procedure SetID(parID : Int64); virtual;
end;
{...code...................}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
   ss : TAlphObject;
   P : pointer;
begin
 ss := TAlphObject.Create;
 P := ss.MethodAddress('SetID');
end;


Ketmar   (2006-09-08 11:06:00) [49]

> [5] Джо ©   (08.09.06 10:53)
болеют...


Джо   (2006-09-08 10:53:00) [50]

> [4] dethcon   (08.09.06 10:51)
> sorry, о как же VMT? DMT?

А что с ними?


dethcon   (2006-09-08 10:51:00) [51]

sorry, о как же VMT? DMT?


Loginov Dmitry   (2006-09-08 07:37:00) [52]

> а что можно выжать? и как...


Прочитать справку о том, как устроен класс, то каким адресам искать нужные таблицы. (Я в подробности не вдавался, но могу предположить, что о НЕ published-свойствах информации вообще никакой не найдешь. Все необходимые ссылки разрешаются еще на эпате компиляции, т.е. вызовы таких свойств превращаются к обращениям к методам (статическим, динамическим, виртуальным), и полям класса. Короче, обрадовал. Теперь хелп читай (и сам пожалуй почитаю) :))


i-am-vladko   (2006-09-07 23:59:00) [53]

а что можно выжать? и как...


Loginov Dmitry   (2006-09-07 23:42:00) [54]

Много инфы все-равно не получишь (имена таких свойств точно нигде не хранятся)


Страницы:   1 2 3

Наверх

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