17 / 17 / 0
Регистрация: 19.02.2012
Сообщений: 68
1

COM и асинхронный вызов. Непонятки с событиями

04.06.2012, 22:29. Показов 2234. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Впервые решил разработать ком-сервер, и столкнулся в одной очень интересной проблемой.
Мой сервер общается с клиентами средствами событий. т.е. создан dispinterface событий на которые подписывается клиент. Делал все по мануалу. Забегая на перед скажу что данная связка реализрована и работает в штатном режиме отлично.
Генеральная задача ком-сервака - это коннект к некой софтине через функции реализованные в DLL (реализация моя). Моя DLL периодически вызывает функции из DLL поставляемой с вышеупомянутой софтиной. Связка "моя DLL - DLL API сторонней софтины" понадобилась чтобы нарастить некий функционал. Связка "ком-сервер - моя DLL" понадобилась чтобы уйти от ограничения "одна DLL - один клиент" (это будет системы роботизированного трейдинга на бирже). Итак, ком-сервер коннектится к DLL (объект работающий с DLL реализует паттерн Синглтон), а неопределенное количество клиентов в ком-серверу. Все получается складно.

НО

В API DLL сторонней есть функции которые работают асинхронно. В обработчики этих callback-ов я прописал вызов внешних собственных callback-ов с ком-сервака, чтобы передавать через них нужные мне параметры. И они не работают. Если я свой внешний callback вызываю в функции которая непосредственно вызывается с сервака - все корректно, клиенты получают события инициируемые этими callback-ами на серваке. А если мой callback прописан в обработчике callback-а передаваемого в DLL API сторонней софтины, то клиенты просто не видят сгенеренные события... В ком-серваке событие инициируется и отправляется подписчику:

Delphi
1
2
3
4
5
6
procedure TRobotArmyServerAutomation.OnResultOperations(ACodeResult: Integer;
  ADescription: LPCTSTR);
begin
  if FEvents <> nil then
    FEvents.OnResultOperationsEvent(ACodeResult, ADescription);
end;
, а подписчик их тупо не видит... как-будто сервер молчит.

В какую сторону копать подскажите плиз... В чем может быть причина?

Сервер, клиент реализован на delphi.
DLL на с++...

Добавлено через 1 час 59 минут
Я так понимаю, что когда сервер самостоятельно инициирует (из callback-а DLL сторонней софтины а не из метода com-объекта) отправку события на клиент, то он не может однозначно определить подписчика который должен получить данное событие. Получается своеобразный "выстрел в небо". По этой причине реакции на клиенте нет.

Я прав или нет?

Добавлено через 8 часов 7 минут
Неужели нет никаких мыслей или предположений? 31 просмотр на текущий момент...
0
04.06.2012, 22:29
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2012, 22:29
Ответы с готовыми решениями:

Непонятки с событиями страницы
Всем привет. На странице добавляю два DropDownList через разметку ASP. Источник данных указываю вручную в коде в событии...

Асинхронный вызов
Люди, кроме BeginInvoke EndInvoke как еще можно сделать асинхронный вызов? препод сказал, что это полуасинхронный вариант, а надо сделать...

Асинхронный вызов функции
Добрый день. нужна помощь в освоении столь непростого дела как многоопытность )). Нужно сделать программку которая в фсинхронной функции...

2
Модератор
 Аватар для vxg
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,426
06.06.2012, 07:53 2
о! и ты здесь) отписал на кубан следующее
если в DLL передается функция, вызываемая ею при определенных обстоятельствах, и внутри этой функции производится вызов функций, переданных клиентами в COM-объект, то все должно работать. однако, если в этих клиентских функциях происходит вызов методов STA COM-объекта, то они не пройдут - объект блокирован вызовом со стороны DLL и вызов его метода будет ожидать снятия блокировки. естественно, ожидание будет вечным. если все необходимое клиентские функции получают через аргументы и не обращаются к COM-объекту, то, вроде должно работать и с STA COM-объектом.
0
17 / 17 / 0
Регистрация: 19.02.2012
Сообщений: 68
07.06.2012, 19:00  [ТС] 3
Цитата Сообщение от vxg Посмотреть сообщение
о! и ты здесь) отписал на кубан следующее
если в DLL передается функция, вызываемая ею при определенных обстоятельствах, и внутри этой функции производится вызов функций, переданных клиентами в COM-объект, то все должно работать. однако, если в этих клиентских функциях происходит вызов методов STA COM-объекта, то они не пройдут - объект блокирован вызовом со стороны DLL и вызов его метода будет ожидать снятия блокировки. естественно, ожидание будет вечным. если все необходимое клиентские функции получают через аргументы и не обращаются к COM-объекту, то, вроде должно работать и с STA COM-объектом.
Да, спасибо. Обсуждение привело к положительному результату. COM-сервак работает и радует своих пользователей
0
07.06.2012, 19:00
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2012, 19:00
Помогаю со студенческими работами здесь

Асинхронный вызов функции
с потоками еще не имел дело как и с асинхронностью, поэтому пишу сюда. у меня есть 2 функции, которые выполняются последовательно....

Правильный асинхронный вызов
Здравствуйте. Есть json файл, который нужно асинхронно парсить при вызове первого Activity. Я сделал так, но это вряд ли правильно: ...

Асинхронный вызов httpWebResponse
Мне нужно вернуть строку, в класс вызвавший функцию, которая получена методом GetYoulaAdvert Попробовал так, но ругается на ...

Асинхронный вызов функции
Существует функция Get_Send. Собственно ничего не возвращает, другие потоки не трогает, как её можно попроще выполнить асинхронно ? ...

Асинхронный вызов: Abort и Callback
Всем привет! Недавно начал разбираться с многопоточностью в .NET. 1) Мне нужно запустить поток так, чтобы после его завершения ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
Laravel или Symfony: что лучше для старта?
Wired 18.02.2025
В веб-разработке выбор правильного фреймворка может стать определяющим фактором успеха проекта. Особенно это актуально для PHP - одного из самых распространенных языков программирования, где Laravel. . .
Что нового в Laravel 12
Wired 18.02.2025
С момента своего появления в 2011 году Laravel постоянно развивается, внедряя инновационные решения и совершенствуя существующие возможности. В начале 2025 года ожидается выход Laravel 12 - новой. . .
Роутер в Laravel: как работать с маршрутами
Wired 18.02.2025
Маршрутизация - один из основополагающих элементов любого веб-приложения на Laravel, определяющий как приложение отвечает на HTTP-запросы к различным URL-адресам. По сути, роутинг - это механизм. . .
Интеграция шаблона Bootstrap в Laravel PHP
Wired 18.02.2025
Разработка веб-приложений в современном мире требует не только надежного бэкенда, но и привлекательного, отзывчивого интерфейса. Laravel, как один из самых популярных PHP-фреймворков, отлично. . .
Использование контроллеров и middleware в Laravel PHP
Wired 18.02.2025
Современная веб-разработка требует четкой организации кода и эффективного управления потоком HTTP-запросов. Laravel, как один из ведущих PHP-фреймворков, предоставляет два мощных инструмента для. . .
Фильтрация массива по неточному соответствию элементам другого массива в JavaScript
Wired 18.02.2025
При работе с массивами данных в JavaScript иногда возникает задача поиска и фильтрации элементов по неточному соответствию. В отличие от точного сравнения, когда мы ищем полное совпадение значений,. . .
Создаем SPA Router на чистом JavaScript
bytestream 17.02.2025
В современной веб-разработке одностраничные приложения (SPA) стали стандартом для создания динамичных и отзывчивых пользовательских интерфейсов. Ключевым компонентом любого SPA является роутер -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru