![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить инфо о property, об`явленом НЕ published?
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]Много инфы все-равно не получишь (имена таких свойств точно нигде не хранятся)