Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

Как вызвать функцию хоста из dll?   Найти похожие ветки 

 
kreyl   (2006-05-31 10:37) [0]

Есть приложение-хост, оно загружает плагин-длл. Хост, соответственно, может вызывать функции плагина. А как из плагина вызвать функцию хоста?

Нужно вот для чего. Плагин что-то обслуживает или считает что-то длительное. И когда он с этой работой покончил, нужно дать знать хосту.

Заранее спасибо :-)


 
Dmitrij_K   (2006-05-31 10:39) [1]

Как вариант, можно послать сообщение окну хоста.


 
wal ©   (2006-05-31 10:41) [2]

Хост, давая команду на обслуживание или расчет чего-то длительного передает адрес CallBack-функции.


 
DrPass ©   (2006-05-31 10:47) [3]

Или пусть себе считает в отдельном потоке - тогда и посылать ничего не нужно


 
kreyl   (2006-05-31 10:56) [4]

2 DrPass:
Считать-то он по-любому будет в отдельном потоке, поскольку таких вычислений может быть не одно :-)
Идея вот какая: пришел клиент, говорит - посчитайте мне. Хост запускает расчет, а клиенту говорит - ждите. Потом расчет закончился, хост об этом как-то узнал, и говорит клиенту - нате вам результат.


 
StriderMan ©   (2006-05-31 11:45) [5]

CALLBACK однозначно. Просто и со вкусом.


 
DrPass ©   (2006-05-31 12:23) [6]


> расчет закончился, хост об этом как-то узнал,

Функция расчета вернула управление - вот и узнал. Callback тут как бы и не нужен.


 
evvcom ©   (2006-05-31 14:34) [7]


> Функция расчета вернула управление -

Куда она вернула управление, если работает в отдельном потоке? Сначала сам разберись, а потом уж советы давать лезь.
Варианта 2, как уже говорили:
1. [1];
2. [2].
Мне нравится [1] через PostMessage - писанины на 3 строчки меньше и меньше затрат на переключение контекстов потоков.


 
DrPass ©   (2006-05-31 15:02) [8]


> evvcom ©   (31.05.06 14:34) [7]

эээ... а что такое поток? Темный ящик у бабушки на балконе?
Поясняю для непонятливых: для обработки запроса хост создает обслуживающий его поток, в этом потоке происходит обращение к DLL, функция в DLL сделала свои расчеты, или что она там делает, и вернула управление туда, откуда она была вызвана, в том же потоке, но в хост-приложении, который и делает завершающие операции. Никакой лапши из колбеков и сообщений без 100% необходимости городить не нужно - это плохой тон программирования, ибо потом программа рискует перерасти в нечто невразумительное и нечитаемое. А в поставленной задаче необходимости как раз не видно.


 
isasa ©   (2006-05-31 15:25) [9]

evvcom ©   (31.05.06 14:34) [7]

а мне больне нравится SendMessage(HostWinHandle, WM_COPYDATA ...);
для синхронизации полезно, да и передать можно много чего. :)


 
evvcom ©   (2006-05-31 16:33) [10]


> для обработки запроса хост создает обслуживающий его поток,
>  в этом потоке происходит обращение к DLL

Это другое дело, только тогда можно наступить на другие грабли: функция(-ии) в dll должна(-ы) быть потокобезопасной(-ыми).

> мне больне нравится SendMessage

можно, если очень хочется. SendMessage приведет к переключению контекста потока на основной, потом после обработки сообщения еще одно переключение уже назад на дополнительный поток только для того, чтобы уснуть или умереть, и опять переключение на основной. С постом будет всего одно переключение, но и через него можно подготовить большой объем данных, передать и уснуть(умереть), не щелкая туда-сюда контекст потока.


 
kreyl   (2006-06-02 13:53) [11]

Большое спасибо, очень познавательно :-) Разобрался :-)



Страницы: 1 вся ветка

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
3-1147500946
Leshiy
2006-05-13 10:15
2006.07.16
Значение параметра xml документа


2-1151330730
bulavkin
2006-06-26 18:05
2006.07.16
DelphX --- Отобразить спрайт


15-1150695570
Ega23
2006-06-19 09:39
2006.07.16
С Днём рождения! 18 июня


15-1150460068
NewCheloveck555
2006-06-16 16:14
2006.07.16
Подскажите бесплатный хостинг с поддержкой MySQL


6-1142314044
Oops
2006-03-14 08:27
2006.07.16
Дата изменения файла на удаленном серваке