![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача события из dll
JaoDa © (2005-02-04 12:59:00)можно ли передать событие из DLL-ки в основную программу? Если да, то как?
JaoDa (2005-02-04 23:22:00) [1]Пасиб всем, callback кажись то, что нужно
зы: с COM-ом заморачиваться смысла нет, я наоборот от него бегу.
Бином Ньютоныч (2005-02-04 20:53:00) [2]>Eraser © (04.02.05 20:44) [15]
Да я так...не всерьез:) А то "Во-во, почти оно", и тут-же - дай примерчик.
Eraser (2005-02-04 20:44:00) [3]JaoDa
Маленьким примерчик не получиться, но там всё очень просто. В сети полно примеров. Ищи на предмет: callback delphi dll
Набережных С. ©
Не стОит так заморачиваться. По моему для этих целей есть callback процедуры.
Набережных С. (2005-02-04 20:17:00) [4]>JaoDa
>Во-во, почти оно
А зачем почти, когда можно точно?
Есть множество способов. Про сообщения уже говорили. Кроме того, ехе-файл тоже может экспортировать функции, которые библиотека может найти GetProcAddress(0,... Далее, приложение может вызвать функцию длл и в ней передать адрес своей функции обратного вызова. Вместо адреса функции туда можно передать интерфейс. Приложение может зарегистрировать свой СОМ-объект в таблице активных объектов, а длл получить его интерфейс. Можно передать безымянный канал или эвент. Можно еще много чего вплоть до извращений, выбирай на вкус.
>а можно масенький живой примерчик?
Не-а. RTFM
JaoDa (2005-02-04 15:22:00) [5]Суть такова - передать из dll в основную программу сообщение или событие о том что в ней что-то произошло *к примеру пришла почта, которую нужно забрать
Вообще хотел через event, но походу дела, мечтать не вредно :)) *ой только камнями не кидайте...
>wl
>С помощью export-функции передаешь Handle окна( которое будет >обрабатывать сообщения) в dll, а уже из dll вызываешь >SendMessage(Handle, WM_USER+..., ..., ...);
Дык, у меня и окон там нет и боюсь что что-нить потеряется...
>Вот пример - процедура из dll запускает поток и возвращает >управление программе. Чтобы уведомить программу о завершении >потока, можно из него послать user-defined message.
Во-во, почти оно...а моно масенький живой пример? :)
>Eraser
>Событие в строгом понимании Object Pascal- нельзя.
>А вообще почитай про функции обратного вызова.
Ок, пойду почитаю...а можно масенький живой примерчик? :)
wl (2005-02-04 14:06:00) [6]Digitman © (04.02.05 14:02) [11]
понимаю конечно. но боюсь пока JaoDa не пояснит что именно он понимал под этим словом, дискуссию можно пока приостановить
Digitman (2005-02-04 14:02:00) [7]
> wl © (04.02.05 13:46) [8]
ты разницу между message (сообщение) и event (событие) вообще понимаешь ? или для тебя эти понятия тоже индифферентны ?
Eraser (2005-02-04 14:01:00) [8]JaoDa
можно ли передать событие из DLL-ки в основную программу? Если да, то как?
Событие в строгом понимании Object Pascal- нельзя.
А вообще почитай про функции обратного вызова.
Eraser (2005-02-04 14:00:00) [9]JaoDa
можно ли передать событие из DLL-ки в основную программу? Если да, то как?
Событие в строгом понимании Object Pascal- нельзя.
А вообще почитай про функции обратного вызова.
wl (2005-02-04 13:46:00) [10]Ну почему же - всё правильно сформулировано, imho.
Вот пример - процедура из dll запускает поток и возвращает управление программе. Чтобы уведомить программу о завершении потока, можно из него послать user-defined message.
Digitman (2005-02-04 13:46:00) [11]
> msguns © (04.02.05 13:39) [6]
> Видимо, речь идет
"видимо", "не видимо" ..
слушай, я не телепат.
msguns (2005-02-04 13:39:00) [12]>Digitman © (04.02.05 13:12) [3]
Скорее всего, он выразился некорректно (неправильно). Видимо, речь идет о посылке сообщения длл-ке при обработке некоторого события. Хотя мне тоже непонятно, как можно послать сообщение длл-ке ? Ведь это же просто проца из либа, а не объект, способный "принять" это сообщение.
wl (2005-02-04 13:29:00) [13]Мне кажется речь идёт о Window Messages.
С помощью export-функции передаешь Handleокна( которое будет обрабатывать сообщения) в dll, а уже из dll вызываешь SendMessage( Handle, WM_USER+..., ..., ...);
конечно можно его послать и по broadcast, но насколько я помню(давно было) события не всегда приходили - скорее всего какие-то ошибки в параметрах
JK (2005-02-04 13:19:00) [14]Можно при каком-то событии выполнить функцию из DLL.
Это ты хотел?
Digitman (2005-02-04 13:12:00) [15]
> JaoDa (04.02.05 13:07) [2]
лучше бы ты подумал о том, какую чушь ты несешь, говоря о "передаче события" вообще..
ну нельзя ! понимаешь, не-ль-зя передать "событие" откуда бы то ни было куда бы то ни было !
можно передать ИНФОРМАЦИЮ !!
JaoDa (2005-02-04 13:07:00) [16]я так и думал :((((
Digitman (2005-02-04 13:04:00) [17]
> можно ли передать событие
нельзя.
не "из DLL-ки в основную программу", ни наоборот.
событие - это просто некий факт.
факт - понятие абстрактное, факт нельзя ни принять не передать.