Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

Как вызвать функцию хоста из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
2-1151404087
iamdanil
2006-06-27 14:28
2006.07.16
Need help: помогите среди всех окон найти окно


2-1151329549
novill
2006-06-26 17:45
2006.07.16
Текущий каталог для сервиса(службы)?


2-1151336611
b.o.n.d.007
2006-06-26 19:43
2006.07.16
Не понимаю циклы. Помогите.


2-1151583575
Ega23
2006-06-29 16:19
2006.07.16
Как получить список всех созданных фреймов приложения?


1-1149057436
kreyl
2006-05-31 10:37
2006.07.16
Как вызвать функцию хоста из dll?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский