Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Посылка сообщений в ATL (точки соединения)

1.9K
03 февраля 2003 года
Mazilla
12 / / 10.10.2002
Здравствуйте! Буду очень благодарен, если Вы поможете мне в решении следующей проблемы:
Необходимо сделать Dll-ку, которая могла бы быть использована Web-брузером и посылать ему различные сообщения. При этом сообщения должны посылаться сервером из пользовательского потока, а не из главного. Послать сообщение контейнеру из главного потока очень просто, и это работает. Но мне необходимо, чтобы на фоне выполнялся некий пользовательский поток и, например, по факту завершения своей работы уведомлял об этом контейнер. Я сделал контрол, вставил в html страничку и написал приемники событий. Открыл ее c помощью IE6.0.
Итак, интерфейс сервера предоставляет две функции. Например F1, прямо из которой вызывается посылка сообщения Fire_*** и F2, которая запускает пользовательский поток при помощи AfxBeginThread, а уже из него вызывается Fire_***. В первом случае сообщение доходит до клиента, а во втором нет (при этом функция Invoke (от IDispatch), вызываемая внутри Fire_*** возвращает 0xcccccccc). Я предположил, что посылка сообщения не может происходить из пользовательского потока. Тогда я стал посылать оконное сообщение (WM_LBUTTONDOWN) самому серверу, а уже из обработчика оконной процедуры вызывал Fire_***. Казалось бы, это нормальная имитация клика по контролу. Но и это не помогло. Однако же если из клиентской части совершить реальный клик по контролу, то Fire_*** отрабатывает верно. Потом я еще попробовал совсем уж кривой путь: я своего пользовательского потока запросил интерфейс и вызвал F1 напрямую. Тоже не сработало.
Так в чем же дело? Как сделать так, чтобы сообщение доходило? Кстати, если этот мой контрол выложить на форму в проекте VC++ и создать обработчики событий, то все сообщения доходят по любому.
Еще я попробовал сделать контрол, который поддерживает многопоторный апртмент (МТА) но и это не помогло.
Заранее спасибо.
426
03 февраля 2003 года
Krivonos
112 / / 20.01.2000
Скинь мне проэкт на [email]cpp@front.ru[/email] - посмотрю, если будет время...
3.5K
07 февраля 2003 года
Юрий
1 / / 07.02.2003
Привет. Слушай, у меня похожий глюк. Есть автоматизированное при помощи ATL МFC приложение, с умными клиетами(vTable) оно работает как по часам, но с глупыми, скажем с Explorer не работает интерфей обратного вызова, тоесть коиент никак не реагирует на события которые посылает ему сервер. Если знаешь или разберешся со своим кинь на мыло, пожайлуста. [email]_yura@mail.ru[/email] Спасибо.
426
07 февраля 2003 года
Krivonos
112 / / 20.01.2000
Кароче смотрел я - пока не знаю. Может я еще не так в єтом силен, но очевидного решения не вижу - в принципе должно работать. Но почему не пашут - не знаю?
1.9K
07 февраля 2003 года
Mazilla
12 / / 10.10.2002
Спасибо, Krivonos, я уже сам разобрался. Подход не самый лучший, но зато работает. Если надо будет, обращайся. Mazilla
426
08 февраля 2003 года
Krivonos
112 / / 20.01.2000
Серьезно? Напиши как. Просто интересно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог