![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Vikong |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 29.9.2009 Репутация: нет Всего: нет |
Привет всем!
Возникла такая задачка: Есть COM-сервер и программуля, его использующая. Она запускает некий процесс в сервере, об окончании которого сервер сигнализирует отправкой сообщения через
Все работает, но порой возникает проблема, когда вызывается метод СОМ-сервера во время он-паинт и он-дроу, что приводит к возникновению ошибки 80010005 "Внешний вызов изнутри фильтра сообщений невозможен" Согласно MSDN, это решается не прямым вызовом методов сервера, а отправкой сообщений. Попробовал ту же BroadcastSystemMessage, но сервер не получает сообщения. Подскажите, посредством каких функций лучше наладить общение между программулей и СОМ-сервером? nb Я программист БД, поэтому мои решения, возможно, покажутся идиотскими |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Непонятно, как связаны COM сервер и 'он-паинт и он-дроу'? Где происходят эти самые 'он-паинт и он-дроу' и кто кого вызывает?
И нафига нужен BroadcastSystemMessage если в COM это штатно реализуется Event'ами и Callback'ами? |
|||
|
||||
| Vikong |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 29.9.2009 Репутация: нет Всего: нет |
Вот уж так получается, что нет возможности получить доступ к callback'ам. В FoxPro, где это все реализовано, такого понятия, как "указатель на функцию" просто не существует. Можно было бы втиснуть код на ассемблере
Переформулирую вопрос: Какая функция WinAPI обеспечивает отсылку сообщения с _гарантией_, что получатель это сообщение получит, в каком бы состоянии на данный момент ни находился (например, в "спячке"), и чтобы отправитель при этом не ждал, когда получатель обработает сообщение. |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
В другой процесс - IMHO никакая
|
||||
|
|||||
| Vikong |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 29.9.2009 Репутация: нет Всего: нет |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Вряд ли совсем 'потеряется', но когда именно оно будет обработано неизвестно. А если получатель помрет (или закроет окно/нить куда посланно сообщение), то оно вообще может не обработаться Если нужно просто отсигнализировать о чем то, попробуйте примитивы синхронизации (Event и прочие) См. CreateEvent в MSDN |
|||
|
||||
| Vikong |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 29.9.2009 Репутация: нет Всего: нет |
Это для меня как раз не критично. Главное, чтобы сообщение было обработано рано или поздно. А если получатель "умер", то уже никакие сообщения не нужны.
Спасибо за ссылку, посмотрю. |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |