![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TMenuItem.Click -> any.dll\procedure
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]Не оч понятно ..
Предполагаю, что вопрос сводится к тому, как увязать создаваемый в ран-тайм пункт меню некоей формы с некоторым внешним модулем и точкой входа в экспортируемую им подпрограмму ..
так ?