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

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

TMenuItem.Click -> any.dll\procedure


Страницы:   1 2 3 4 5 6 7 8

Dennis I. Komarov ©   (2009-05-22 10:38:00) 

Вопрос - не вопрос но:

Есть: некое приложение, интерфейс которого грузим из некой БД согласно правам пользователя, который запустил это приложение. В частности, возьмем ситуацию с TMainMenu. Согласно правам загрузилось дерево меню и подменюшек. Есть некая "ссылка" (int) на то, что должно выполнится при вызове соответствующего пункта. Процедура сего действия, а так же все интерфейсы и т.п. вынесены в библиотеку (dll).

Вопрос такой: Какая (а точнее, кто придумает лучшую) логика должна быть, чтобы связать конечный пункт менюшки с соответствующей процедурой в библиотеке, при том чтобы выполнялось условие: в приложении описана только логика а конкретные данные вынесены из него, т.е. при добавлении нового пункта (в БД) не изменялось само приложение, а только библиотека (или добавлялась новая)


Dennis I. Komarov   (2009-05-22 12:35:00) [141]


> Библиотеки типов, поддерживаемые этой технологией, дают
> возможность...

Пугает меня такая реализация... Примеры можно?


Dennis I. Komarov   (2009-05-22 12:24:00) [142]


> а это не противоречит тому, что "в приложении описана только
> логика"?

Ну а собственно, в каком месте противоречие?


Сергей М.   (2009-05-22 12:20:00) [143]


> > См. выше.
>
> нету bpl,


Выше - это я про COM/OLE


> что-то я не сильно тут COM/OLE представляю


Библиотеки типов, поддерживаемые этой технологией, дают возможность вызывающему коду узнать все о вызываемом - поддерживаемые интерфейсы, методы/свойства/события этих интерфейсов, типы/описания параметров поддерживаемых вызовов и т.д. и т.п.


clickmaker   (2009-05-22 12:16:00) [144]

> Далее как вызвать процедуру, не зная что это за процедура?
> Не должно о ней ничего знать приложение

а это не противоречит тому, что "в приложении описана только логика"?


Dennis I. Komarov   (2009-05-22 12:06:00) [145]


> Чтобы исключить зависимость от особенностей и требований
> конкретных сред разработки и исполнения и обеспечить универсальность
> интерпроцессного/интермодульного взаимодействия, мелкомягкими
> придуман COM/OLE-механизм.
> Предлагаю обратить на него свой взор)

Ну что-то я не сильно тут COM/OLE представляю :) Тупо возьмем пункт "пользователи" и все что в нем цепляем к ???users.dll в которой формочки типа добавить, удалить, права, группы и прочая ерунда касаемая юзверей.


> См. выше.

нету bpl, так сегодня в гороскопе написано :)

З.Ы. Пишем "некое универсальное ядро" с администрировалкой


Сергей М.   (2009-05-22 11:42:00) [146]


> Чтобы абстрагироваться от борланд


Чтобы исключить зависимость от особенностей и требований конкретных сред разработки и исполнения и обеспечить универсальность интерпроцессного/интермодульного взаимодействия, мелкомягкими придуман COM/OLE-механизм.
Предлагаю обратить на него свой взор)


> как вызвать процедуру, не зная что это за процедура?


См. выше.


Dennis I. Komarov   (2009-05-22 11:34:00) [147]

Ну, собственно это вот и надо выдумать :)
Ну к примеру некий базовый тип одинаковый для всех вызываемых таким образом процедур. Или передавать только указатель памяти, а там уже извращаться и читать какие-то входящие параметры


Palladin   (2009-05-22 11:25:00) [148]


> Далее как вызвать процедуру, не зная что это за процедура?
>  

Ты интересный, а как ты собрался параметры передавать не зная ничего о процедуре?


Dennis I. Komarov   (2009-05-22 11:22:00) [149]


> Сергей М. ©   (22.05.09 10:48) [1]

Не совсем. Сделать в рантайм пункт, выполнить по нему процедуру из вне это не проблема. Вопрос в самой логике которая прописана в exe, и которая не зависит от конечных пунктров и прицедур. Она одна и не меняется от изменения интерфейса...


> Palladin ©   (22.05.09 10:51) [2]

да не суть где хранить, в tag, или брать из вне.
GetProcAddress сохранили. Далее как вызвать процедуру, не зная что это за процедура? Не должно о ней ничего знать приложение...


> Сергей М. ©   (22.05.09 10:52) [3]

Чтобы абстрагироваться от борланд. Ну не будем об этом. Я знаю что есть bpl и с ним все намного проще...


Сергей М.   (2009-05-22 10:52:00) [150]

И опять напрашивается уже изрядно поднадоевший контрвопрос - почему dll, а не bpl ? Чем в дан.случае оправдан выбор ?


Palladin   (2009-05-22 10:51:00) [151]


> чтобы связать конечный пункт менюшки с соответствующей процедурой
> в библиотеке

TMenuItem.Tag
можно хранить там адрес, полученный GetProcAddress


Сергей М.   (2009-05-22 10:48:00) [152]

Не оч понятно ..

Предполагаю, что вопрос сводится к тому, как увязать создаваемый в ран-тайм пункт меню некоей формы с некоторым внешним модулем и точкой входа в экспортируемую им подпрограмму ..

так ?


Страницы:   1 2 3 4 5 6 7 8

Наверх

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