Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Повторный вызов Initialize у COM-Объекта 
:(
    Опции темы
Felan
Дата 16.9.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: нет
Всего: 7



Мне нужно сделать внейшний ком-сервер, так что бы все клиенты работали с одним объектом.

Сделал проект в TurboDelphi, обычное VCL приложение пустое. Добавил к нему Automation Object. 
Параметры: Способ создания - ciMultiInstance, потоковая подель - tmFree

Изменил фабрику классов так, что бы был синглтон, так, как описано Урок 9. COM-сервер средствами Delphi.

В конструкторе формы VCL приложения создаю ком-объект:
Код

procedure TfrmMainCOMServer.FormCreate(Sender: TObject);
begin
  Caption := APPLICATION_TITLE;

  fTestCOMSvr := CoTestOutprocComSrv.Create();
end;


Имею странный эффект:
Случай 1:
Запускаю exe, запуская IE, на HTML страничке создаю свой COM-объект

Код
function InitializeTest()
{
  try
  {
    COMSrv = new ActiveXObject("OutprocComServer.TestOutprocComSrv");
  }
  catch(err)
  {
    ShowError(err);
  }
}


Запускаю еще одну такую страничку, т.е. вышеприведенный код выполняется дважды.
В логе имею следующее:

Код

2008-09-16 17:36:33 Log file created
2008-09-16 17:36:33 Старт приложения <Test outproc COM-Server>
2008-09-16 17:36:33 Создание главной формы <TfrmMainCOMServer>
2008-09-16 17:36:33 [TestOutprocComSrv] Метод фабрики
2008-09-16 17:36:33 [TTestOutprocComSrv] Метод инициализации
2008-09-16 17:36:33 Запуск приложения <Test outproc COM-Server>


Т.е. мой объект как и положено создался один раз и все. Все остальные работают с ним. Что подтверждается одинаковым значением MainThreadID, полученным в тестовом методе моего объекта.

Случай 2:

Делаю все тоже самое, но! НЕ запускаю exe. Т.е. при запросе объекта с HTML страницы должен запустится exe автоматитчески.

В логе имею:
Код

2008-09-16 17:40:56 Log file created
2008-09-16 17:40:56 Старт приложения <Test outproc COM-Server>
2008-09-16 17:40:56 Создание главной формы <TfrmMainCOMServer>
2008-09-16 17:40:56 [TestOutprocComSrv] Метод фабрики
2008-09-16 17:40:56 [TestOutprocComSrv] Метод фабрики
2008-09-16 17:40:56 [TTestOutprocComSrv] Метод инициализации
2008-09-16 17:40:56 [TTestOutprocComSrv] Метод инициализации
2008-09-16 17:40:56 Запуск приложения <Test outproc COM-Server>


Т.е. при таком запуске exe два раза выполняется метод моего ком-объекта: procedure Initialize; override;

Вопрос 1: Почему так происходит, и как от этого избавится? Приложение должно работать с определенными ресурсами. Совершенно необходимо что бы initialize вызывался только один раз даже во втором случае.

Вопрос 2: Я не понял, как он у меня зарегистрировался в реестре. regsvr32 отказывается его регистрировать и деригистрировать. Как это можно сделать для внешних серверов?

ЗЫЖ Есть у кого-нить статья какая-нить именно по внешним ком-серверам? А то че-то у меня ясности в этом вопросе нет :(


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0374 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.