![]() |
|
Модераторы: MetalFan |
![]()
|
|
| Caduser |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: нет Всего: 1 |
Есть много информации о том как сделать свой COM-сервер (внешне-процессный EXE) с помощью мастера Delphi "Automation Object Wizard". Однако поведение такого сервера будет несколько иным, чем у скажем у Word, Exel и т.д.)
1. Если при подсоединении клиентского приложения, COM-сервер не был запущен то он автоматически запускается - это правильно. Однако если закрыть клиента, то закрывается и запущенный им сервер - ЭТО НЕ ПРАВИЛЬНО (например Word, после отсоединения клиента остается запущенным). Может я просто выбрал не ту модель - ciMultiInstance, tmApartment? 2. Для соединения с Word можно использовать примерно такой код:
Однако для самодельного COM-сервера это не сработает, почему??? нужно делать так:
Как заставить свой COM-сервер вести себя аналогично Word??? Это сообщение отредактировал(а) Caduser - 24.1.2007, 06:22 |
||||
|
|||||
| CatATonik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 12.1.2007 Где: Москва Репутация: 2 Всего: 8 |
См. функции RegisterActiveObject и RevokeActiveObject
|
|||
|
||||
| Caduser |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: нет Всего: 1 |
Использование этих функций не помогло, приложение ведёт себя как и прежде: закрываем клиента - закрывается сервер. Вообще эти функции использует пример из JCL "jcl\examples\windows\delphitools\peviewer", не ясно зачем они? Может они срабатывают в Win98? Это сообщение отредактировал(а) Caduser - 24.1.2007, 14:23 |
|||
|
||||
| CatATonik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 12.1.2007 Где: Москва Репутация: 2 Всего: 8 |
У меня срабататывают, может чего-то не так делаешь? Они предназначены ровно для того, что ты описал и работать должны под всеми виндами (может кроме Vista и виндовс 3.1
|
|||
|
||||
| Caduser |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: нет Всего: 1 |
Разобрался (спасибо CatATonik!), теперь работает как надо. В RegisterActiveObject необходимо устанавливать флаг ACTIVEOBJECT_STRONG тогда в процессе регистрации у объекта увеличивается счетчик ссылок и даже после отключения от объекта всех программ-клиентов объект из памяти не выгружается.
Вот работающий код:
Нашел еще одно решение:
так же увеличивает счетчик ссылок на единицу, однако для второго варианта уже не будет работать схема подключения типа:
интересно почему? Это сообщение отредактировал(а) Caduser - 25.1.2007, 05:20 |
||||||
|
|||||||
| CatATonik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 12.1.2007 Где: Москва Репутация: 2 Всего: 8 |
Потому что RegisterActiveObject заносит объект в системный список активных OLE объектов, по которой и происходит поиск при GetActiveOleObject, видимо во втором варианте этого не происходит.
|
|||
|
||||
| Caduser |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: нет Всего: 1 |
Теперь все предельно ясно. Спасибо за помощь!
|
|||
|
||||
| jashilko |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 6.5.2009 Репутация: нет Всего: нет |
У меня такая проблема, каждый клиент создаёт свой сервер что ли. То есть, я регистрирую в сервере событие, каждому клиенту по кнопке делаю реакцию на это событие и пишу обработчик, получается так, что в одном клиенте я событие вызвал, а в других оно не вызывается, почеум так может быть?
|
|||
|
||||
![]()
|
| Правила форума "Delphi: ActiveX/СОМ/CORBA" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |