| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > "Общение" с COM-сервером посредством Message |
| Автор: Vikong 2.10.2009, 13:16 | ||
| Привет всем! Возникла такая задачка: Есть COM-сервер и программуля, его использующая. Она запускает некий процесс в сервере, об окончании которого сервер сигнализирует отправкой сообщения через
Все работает, но порой возникает проблема, когда вызывается метод СОМ-сервера во время он-паинт и он-дроу, что приводит к возникновению ошибки 80010005 "Внешний вызов изнутри фильтра сообщений невозможен" Согласно MSDN, это решается не прямым вызовом методов сервера, а отправкой сообщений. Попробовал ту же BroadcastSystemMessage, но сервер не получает сообщения. Подскажите, посредством каких функций лучше наладить общение между программулей и СОМ-сервером? nb Я программист БД, поэтому мои решения, возможно, покажутся идиотскими |
| Автор: xvr 5.10.2009, 12:27 |
| Непонятно, как связаны COM сервер и 'он-паинт и он-дроу'? Где происходят эти самые 'он-паинт и он-дроу' и кто кого вызывает? И нафига нужен BroadcastSystemMessage если в COM это штатно реализуется Event'ами и Callback'ами? |
| Автор: Vikong 19.10.2009, 12:27 |
| Вот уж так получается, что нет возможности получить доступ к callback'ам. В FoxPro, где это все реализовано, такого понятия, как "указатель на функцию" просто не существует. Можно было бы втиснуть код на ассемблере Переформулирую вопрос: Какая функция WinAPI обеспечивает отсылку сообщения с _гарантией_, что получатель это сообщение получит, в каком бы состоянии на данный момент ни находился (например, в "спячке"), и чтобы отправитель при этом не ждал, когда получатель обработает сообщение. |
| Автор: xvr 19.10.2009, 12:41 | ||||
В другой процесс - IMHO никакая
|
| Автор: Vikong 19.10.2009, 15:16 |
Получается, что если получатель сообщения в другом потоке занят, то сообщение, отправленное ему, потеряется, если не будет обработано в течение некоторого промежутка времени, даже если получатель "жив", так? |
| Автор: xvr 19.10.2009, 16:08 | ||
Вряд ли совсем 'потеряется', но когда именно оно будет обработано неизвестно. А если получатель помрет (или закроет окно/нить куда посланно сообщение), то оно вообще может не обработаться Если нужно просто отсигнализировать о чем то, попробуйте примитивы синхронизации (Event и прочие) См. CreateEvent в MSDN |