Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
Как сделать subj???? Поясняю: Нужно написать процедуру/функция, кот. будет иметь вид procedure Call(ProcName: string); где ProcName - имя процедуры, к примеру, 'TabSheet1Hide'... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 17:20 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
Никак... имхо. Можно вызвать только метод/проперть класса через VMT напрямую или средствами преобразования указателей через обход поименнованных методов объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 17:40 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
Очень просто. Передай процедуру в качестве параметра. Таким образом, например, реализована обработка событий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 17:43 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
> dkstranger Т.е. ты хочешь сказать Код: plaintext 1. 2. 3. 4. 5. Человеку ведь надо по стринговому имени а не по типизированному указателю... dkstranger покажика, как транслируешь стринг в типизированный указатель процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 17:54 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
2KirillovA А ты не можешь найти процедуру по имени? У меня сейчас под рукой нет кода примера (соответ модуль и процедуры типа TNotifyEvent генерит run-time), но это - не проблема ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 17:58 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
> dkstranger По имени - никогда. напиши две процедуры и обратись к одной из них в третьей процедуре - но не напрямую а через строковый параметр... да и еще чтоб при отсутствии такой процедуры в твоей маленькой проги - экшепн вылетал сообразный моменту. ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 18:15 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
Пример дерганья произвольной из длл-ки. type GetStringFunction=function(RequestString: PChar): PChar; Тут может быть процедура, например: PlugInProcedureStart=procedure(MyDevID, MyDevNo: integer); или PlugInProcedureStop=procedure; var pproc: pointer; pproc:=GetProcAddress(PlugIn.Address, PChar(ProcName)); if(pproc<>nil)then Process:=String(GetStringFunction(pproc)(PChar(RequestString))) или в случае процедуры PlugInProcedureStart(pproc)(MyDevID, MyDevNo); else Process:=''; где PlugIn.Address:=LoadLibrary(PChar(DLLName)); Проще дергать по поинтеру на процедуру... Хотя дело вкуса... Процедуры и фнкции должны быть объявлены с far Если не из длл-ки, то еще проще, вместо хэндла длл-и используем HInstance (вместо PlugIn.Address) Вот собссно и все что я хотел сказать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 18:18 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
Спасибо, буду копать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 18:21 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
2KirillovA Я думаю, надо внести уточнение... По имени можно обращаться далеко не к любой процедуре (имен процедур в exe нет). Такого типа управление можно передавать только к экземплярам классов, у ктр есть свойство name Именно поэтому я использую в подобных случаях типы TNotifyEvent и его наследники.. А насчет поиска по имени - просто не помню, но когда то я делал нечто подобное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 18:25 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
> dkstranger дык я и сказал что у классов только можно по произвольному имени выдернуть... посредством неявного/явного использования vmt. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 18:35 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
2Kirillov Согласен. Предлагаю подвести итоги 1. Вызывать можно не любую процедуру, а только соответствующий экземпляр компонента 2. Список компонентов можно получить по TForm.Components В результате можно предложить такой путь а) определить, какого рода процедуры будут нужны и оформить их, например как TNotifyEvent б) сделать обработчик, который бегает по TForm.Components и, если найдет, передает туды управление ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 18:53 |
|
||
|
Вызов процедуры с произвольным именем в runtime
|
|||
|---|---|---|---|
|
#18+
> dkstranger согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2002, 18:56 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32078068&tid=2119505]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 282ms |
| total: | 437ms |

| 0 / 0 |
