![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить инфо о property, об`явленом НЕ published?
i-am-vladko © (2006-09-07 19:58:00)Как получить инфо о property, об`явленом НЕ published, run-time?
Наиль (2006-09-08 13:49:00) [21]
> [33] i-am-vladko © (08.09.06 13:45)
Всё равно, объясни откуда взялась такая задача?
i-am-vladko (2006-09-08 13:45:00) [22]Кажется, сама иерархия роли не играет. Class - то самый что ни на есть базовый. Все остальные - потомки
Наиль (2006-09-08 13:42:00) [23]
> [31] Наиль © (08.09.06 13:39)
Думал [30] написано автором ветки. Ошибся.
Наиль (2006-09-08 13:39:00) [24]Расскажи про иерархию по подробней, может чем-то и поможем.
{KRYAK} (2006-09-08 13:34:00) [25]>Procedure ExecuteProc(ProcName:string)
>begin
>if ProcName='Metod1' then YourClass.Metod1 else
>if ProcName='Metod2' then YourClass.Metod2 else
>...
>... else TException.Create('ВигВам!');
>end;
Конечно, можно и так. Идея в другом - унифицировать в ето в базовом классе, не прописывая ЕxecuteProc(...) по всей иерархии
{KRYAK} (2006-09-08 13:30:00) [26]А почему бы не генерить DLL?
Наиль (2006-09-08 13:30:00) [27]
> дык.. проблема-то ето самое MyMethod как parametr задать
> - имя знать нужно, считать... кто знает откуда...
Нам не понятно откуда могла взяться такая задача.
Если класс в программе не используется, то естественно, ты не сможешь вызвать его методы. Если используется, то имена методов класса известны.
Значит можно написть что-то вроде:
Procedure ExecuteProc(ProcName:string)
begin
if ProcName='Metod1' then YourClass.Metod1 else
if ProcName='Metod2' then YourClass.Metod2 else
...
... else TException.Create('ВигВам!');
end;
i-am-vladko (2006-09-08 13:16:00) [28]>@TMyClass.MyMethod; :) и пофигу как он там виртуальный или позолоченный
дык.. проблема-то ето самое MyMethod как parametr задать - имя знать нужно, считать... кто знает откуда...
нигде имени нет ((
полный облом
i-am-vladko (2006-09-08 13:07:00) [29]Куда уж более...
default (2006-09-08 13:02:00) [30]I>
> Если об`явить virtual - будет регистрация в VMT, есть ли
> способ взять указатель оттуда?
@TMyClass.MyMethod; :) и пофигу как он там виртуальный или позолоченный
Джо (2006-09-08 12:56:00) [31]> [18] i-am-vladko © (08.09.06 12:32)
> Задача - унифицировать поиск property Field по его имени
> и типу в базовом классе.
А может, это не "задача", а "способ реализации"? Для чего это нужно на более высоком уровне абстракции?
Джо (2006-09-08 12:55:00) [32]> [20] i-am-vladko © (08.09.06 12:40)
> а все-таки ПОЧЕМУ НЕЛЬЗЯ? Если об`явить virtual - будет
> регистрация в VMT, есть ли способ взять указатель оттуда?
Опять двадцать пять! VMT! :) А что, в VMT хранятся именаметодов?
i-am-vladko (2006-09-08 12:47:00) [33]O! поподробнее, PLZ )))
default (2006-09-08 12:46:00) [34]i-am-vladko © (08.09.06 12:40) [20]
> Если об`явить virtual - будет регистрация в VMT, есть ли
> способ взять указатель оттуда?
есть, правда метод, смещение в vmt которого ищется, должен быть задан во время компиляции(с указанием класса)
i-am-vladko (2006-09-08 12:40:00) [35]а все-таки ПОЧЕМУ НЕЛЬЗЯ? Если об`явить virtual - будет регистрация в VMT, есть ли способ взять указатель оттуда?
i-am-vladko (2006-09-08 12:34:00) [36]>Нельзя получить указатель на паблик-метод по его имени. И всё.
ну тогда и задача падает...
i-am-vladko (2006-09-08 12:32:00) [37]Задача - унифицировать поиск property Field по его имени и типу в базовом классе.
Джо (2006-09-08 12:20:00) [38]> [14] i-am-vladko © (08.09.06 12:10)
> как добраться к методу, без создания для него published
> property?
Ну при чем здесь "published property"? Нельзя получить указатель на паблик-метод по его имени. И всё.
А может, лучше "зайти со стороны задачи"? Для какой цели это всё затевается?
Наиль (2006-09-08 12:20:00) [39]
TYourClass=class
public
procedure Method;
End;
procedure TForm1.Button1Click(Sender:TObject);
begin
YourClass.Method;
End;
Я добрался до не Published-метода, но я подозреваю, что ты не это имел в виду.
DiamondShark (2006-09-08 12:17:00) [40]
> как добраться к методу, без создания для него published
> property?
Объявить его в published секции.