![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как загруженной DLL выполнить Функцию (метод) основной программы? [D7, WinXP]
Alex_Mel © (2005-10-28 15:33:00)Здравствуйте.
Программа загружает библиотеку, которая при поступлении опред. события должна выполнить функцию, которая находится в основной программе. Как это реализовать?
Leonid Troyanovsky (2005-10-28 17:37:00) [1]
> isasa © (28.10.05 17:32) [26]
> У меня сильное подозрение, что речь идет о COM+ Events.
IMHO, выяснялось, что + & Events можно даже опустить.
--
Regards, LVT.
isasa (2005-10-28 17:32:00) [2]У меня сильное подозрение, что речь идет о COM+ Events.
Leonid Troyanovsky (2005-10-28 17:29:00) [3]
> Джо © (28.10.05 17:25) [24]
> > ограничивать
> > себя одними дельфийскими приложениями
> Тогда непонятен совет использовать package library
Ну, это ж на (самый) худой конец.
--
Regards, LVT.
Джо (2005-10-28 17:25:00) [4]
> Кроме того, если уж речь зашла о плагинах, мы не должны
> ограничивать
> себя одними дельфийскими приложениями
Тогда непонятен совет использовать package library.
Leonid Troyanovsky (2005-10-28 17:17:00) [5]
> > Во-вторых, IMHO, dll в классическом виде - хреновый кандидат
> Джо © (28.10.05 16:57) [20]
> Понятие "хреновости", конечно, субъективно. Но, все-же -
> чем навеяна такая характеристика?
> clickmaker © (28.10.05 17:00) [21]
> Я тоже не согласен. Почему зуб на длл?
Речь идет о классическом PE, который умеет работать с лишь простыми
типами данных. Положение также усугубляется самой VCL, используещего
n-ое число глобальных переменных (в секции implementation, да простят
меня пуристы).
А плагины, IMHO, это нечто расширяющее функциональность (или еще
что-то там еще) базовой программы, которые естественно укладываются
в некое подмножество OOP, и, соответственно, требует гораздо более
изощренных типов данных, как, собс-но, и методов их обработки.
Кроме того, если уж речь зашла о плагинах, мы не должны ограничивать
себя одними дельфийскими приложениями (иначе, самым лучшим способом
было б написание всего в одном флаконе).
Можно б, конечно, продолжить, но, IMHO, все это уже было не раз
говорено и, возможно, набило оскомину.
--
Regards, LVT.
Leonid Troyanovsky (2005-10-28 17:01:00) [6]
> Alex_Mel (28.10.05 16:54) [19]
> Увы, как оперировать ни с одним из них не представляю. Да
> и постановщики требуют именно Dll, им не объяснишь :). Так
> что выбора нет.
От расширения (имени) мало чего зависит.
Построенные плагины вполне могут зваться .dll, бо, таковыми
они по сути и являются.
А вот с остальным (представлением), тут нужно RTFM,RTFM и RTFM.
Надеюсь, что нужное напрвление тебе здесь придадут.
Ну, а так - google тебе в руки.
--
Regards, LVT.
clickmaker (2005-10-28 17:00:00) [7][18] Leonid Troyanovsky © (28.10.05 16:51)
> Во-вторых, IMHO, dll в классическом виде - хреновый кандидат
> на плагин.
Я тоже не согласен. Почему зуб на длл?
Джо (2005-10-28 16:57:00) [8][18] Leonid Troyanovsky © (28.10.05 16:51)
> Во-вторых, IMHO, dll в классическом виде - хреновый кандидат
> на плагин.
Понятие "хреновости", конечно, субъективно. Но, все-же - чем навеяна такая характеристика?
Alex_Mel (2005-10-28 16:54:00) [9]>>Это д.б. ActiveX или иной COM в лучшем случае, ну, а если все делается
собс-ручно, то .bpl - на худой конец
Увы, как оперировать ни с одним из них не представляю. Да и постановщики требуют именно Dll, им не объяснишь :). Так что выбора нет.
Leonid Troyanovsky (2005-10-28 16:51:00) [10]
> Alex_Mel (28.10.05 16:46) [17]
> Leonid Troyanovsky Да можно и из exe, тогда вообще без проблем.
> Только задача так поставлена. Эта Dll должна быть.. ну
> типа - плагином...да, так и есть. Работает все в одном АП.
> и прогу и DLL писать сам буду.
Во-первых, из трех вариантов исключен лишь один.
Во-вторых, IMHO, dll в классическом виде - хреновый кандидат на плагин.
Это д.б. ActiveX или иной COM в лучшем случае, ну, а если все делается
собс-ручно, то .bpl - на худой конец.
--
Regards, LVT.
Alex_Mel (2005-10-28 16:46:00) [11]Leonid Troyanovsky Да можно и из exe, тогда вообще без проблем. Только задача так поставлена. Эта Dll должна быть.. ну типа - плагином...да, так и есть. Работает все в одном АП. и прогу и DLL писать сам буду.
Alex_Mel (2005-10-28 16:43:00) [12]>>ANB © В своем. Схема в принципе понятна, TUser в начале предложил. Ее навернуть, и получится то, о чем вы говорите. Так ведь?
Leonid Troyanovsky (2005-10-28 16:40:00) [13]
> Alex_Mel (28.10.05 16:21) [12]
> Как зарегистрировать обработчики, которые библиотека потом
> УВИДИТ???
Постой-постой, тут у нас тоже вопросы накопились.
Надобность в вопрошаемом может возникнуть в следующих случаях:
1. dll работает и в другом процессе;
2. в dll работает вторичный поток;
3. dll субклассирует некую оконную процедуру хоста.
Каждый из этих случаев имеет свои особенности, так, что
для начала, надо определится.
Ну, и вопрос личный: почему искомое нельзя было сделать из exe.
--
Regards, LVT.
ANB (2005-10-28 16:36:00) [14]Для примера нужно уточнение - в своем или чужом АП работает твоя DLL.
ANB (2005-10-28 16:35:00) [15]
> Alex_Mel (28.10.05 16:21) [12]
После загрузки DLL в основном модуле вызвать из нее какую нибудь процедуру инициализации, в которую нужно передать информацию о нужных функциях и объектах (их адреса). Прототипы функций в DLL объявить заранее. Потом из DLL сможешь вызывать все что передал. Проблема если DLL ты внедрил в чужое АП. Тогда придется изгаляться с проецируемыми в память файлами или передавать нужную инфу сообщениями. В этом случае напрямую вызвать будет ничего нельзя, но можно объявить свои сообщения, а в основной программе встроить их обработку в цикл обработки сообщений какого нибудь окна.
Alex_Mel (2005-10-28 16:21:00) [16]Leonid Troyanovsky © Так-так, не так быстро.
Своим вызовом хост регистрирует свои обработчики, которые
будут выполнятся при наступлении интересующего события.
А библиотека, при наступлении события, проходит по списку
зарегистрированных обработчиков и вызывает их, передавая
необходимые параметры
Как зарегистрировать обработчики, которые библиотека потом УВИДИТ???
Можно маленький примерчик? а-то туговато доходит.
Leonid Troyanovsky (2005-10-28 16:14:00) [17]
> Alex_Mel (28.10.05 15:59) [8]
> >>> TUser © А вот это мысль. Спасибо!
А.. Так это собс-ный dll, и он в собс-ном хосте.
Тогда, все просто.
Своим вызовом хост регистрирует свои обработчики, которые
будут выполнятся при наступлении интересующего события.
А библиотека, при наступлении события, проходит по списку
зарегистрированных обработчиков и вызывает их, передавая
необходимые параметры.
--
Regards, LVT.
PS Правда, не совсем понятно, почему хост не мог сам реагировать
на оные события.
Digitman (2005-10-28 16:12:00) [18]
> Alex_Mel (28.10.05 15:54) [5]
у тебя в голове каша из обрывочных сведений о DLL.
советую разобрать эту кашу.
Leonid Troyanovsky (2005-10-28 16:05:00) [19]
> Alex_Mel (28.10.05 15:54) [5]
> Смысл в том, что DLL реагирует на событие операционной системы.
> Как только оно произошло, в ней срабатывает функция, которая
> в свою очередь должна, свой результат передать как аргумент
> другой ф-ии, но уже в главной программе.
> Можно конечно по таймеру проверять, а не вернула ли у нас
> что-нить Dll, но хотелось бы, чтобы DLL сама запустила ее
> в нужный момент. Так понятно? :)
Смутное подозрение, что оная dll работает в контексте другого процесса.
А если так, то способы передачи данных лежат в области IPC.
Скорее всего, у ей д.б. некий COM интерфейс, который и следует
внимательнейшим образом поискать.
--
Regards, LVT.
Alex_Mel (2005-10-28 15:59:00) [20]>> Джо © Да, ладно, не надо обижаться ;) мне ж интересно возможно ли это в принципе</I
>>> TUser © А вот это мысль. Спасибо!