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

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

Как загруженной DLL выполнить Функцию (метод) основной программы? [D7, WinXP]


Страницы:   1 2

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 © А вот это мысль. Спасибо!


Страницы:   1 2

Наверх

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