Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.07.2016, 18:17
Аватар для a.n.d.r.e.w
a.n.d.r.e.w a.n.d.r.e.w вне форума
Прохожий
 
Регистрация: 01.07.2015
Сообщения: 28
Версия Delphi: delphi xe7
Репутация: 10
По умолчанию Сервер автоматизации

Уважаемые форумчане!
Экспериментирую с COM, хочу создать приложение - сервер автоматизации по типу MS WORD. По типу имею ввиду саму конструкцию, т.е. есть один главный объект автоматизации Word.Application который в своих свойствах передает интерфейсы на другие внутрипроцессорные объекты автоматизации, есть главная форма на которой реализуется функционал программы и все это находится в dll. Для запуска такого приложения используется приложение "стартер" с несколькими строками кода.

Код:
 

CoInitialize(nil) ;

  app:=createoleobject('Word.Application');
  app.Visible:=true;

 CoUnInitialize;

"стартер"(приложение-клиент) запускает приложение-сервер, само завершается а приложение-сервер остается работать.

я создал ActiveX library в нее добавил объект автоматизации Applc
в методе TApplc.Initialize делаю так Form1:=TForm1.Create(nil); Form1.Show;

форма появляется, но при закрытии стартера(клиента) закрывается и сервер вместе с формой. Что то не так с Instancing и ThreadingModel? Какие только варианты не пробовал.

Как вообще реализуется такая схема?
Точнее как заставить сервер работать после завершения приложения клиента ("стартера") и куда и как правильно засунуть форму?
Ответить с цитированием
  #2  
Старый 09.07.2016, 04:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Потому что ты создал In-Proc сервер, а тебе нужен Out-Proc.
Т.е. у тебя должно быть 2 разных проекта.
Один - сервер. Самостоятельне приложение.
Второй - твой стартер.
Ответить с цитированием
  #3  
Старый 09.07.2016, 13:47
Аватар для a.n.d.r.e.w
a.n.d.r.e.w a.n.d.r.e.w вне форума
Прохожий
 
Регистрация: 01.07.2015
Сообщения: 28
Версия Delphi: delphi xe7
Репутация: 10
По умолчанию

а как сделать так чтобы сервер оставался работать после закрытия клиента?

создаю новое приложение Server с формой
добавляю объект автоматизации Appl регистрирую
создаю клиента - консольное приложение в котором
app:=createoleobject('Server.Appl');

окно сервера появляется и сразу закрывается так как закрывается консольное приложение

а если сделать
app:=createoleobject('Word.Application');
appl.visible:=true

то после закрытия клиента ворд продолжает работать

уверен ответ элементарный но я его не вижу
Ответить с цитированием
  #4  
Старый 09.07.2016, 19:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Посмотри здесь:
http://www.blong.com/Articles/Automation%20In%\
20Delphi/Automation.htm
Ответить с цитированием
  #5  
Старый 10.07.2016, 12:18
Аватар для a.n.d.r.e.w
a.n.d.r.e.w a.n.d.r.e.w вне форума
Прохожий
 
Регистрация: 01.07.2015
Сообщения: 28
Версия Delphi: delphi xe7
Репутация: 10
По умолчанию

http://www.blong.com/Articles/Automa...Automation.htm
Да. Спасибо. Это почти то.
В примере маленький outproc сервер передает клиенту в единственной своей функции
текущее время а тот печатает его в своем заголовке.
Но все равно как и у меня при закрытии клиента останавливается и сервер.

В общем цели можно достичь если перекрыть у своего объекта автоматизации
метод ObjRelease например так..
Код:
function TAppl.ObjRelease: Integer;
begin
  _AddRef;
  result:=inherited ObjRelease;
end;
Но не знаю правильно ли это...

Последний раз редактировалось a.n.d.r.e.w, 10.07.2016 в 13:53.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter