Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Singleton Com Server   Найти похожие ветки 

 
kblc ©   (2005-09-05 18:32) [0]

Уважаемые мастера, почему не работает этот код?

type
 TMySingletonObject = class(TComObject, IMySingletonObject)
 protected
 end;

 TMySingletonObjectFactory = class (TComObjectFactory)
 public
   function CreateComObject(const Controller: IUnknown): TComObject; override;
 end;

implementation

uses ComServ;

var
 cntSyngletonObject : TComObject;

function TMySingletonObjectFactory.CreateComObject(const Controller: IUnknown): TComObject;
begin
 if cntSyngletonObject = nil then
   Result := inherited CreateComObject (Controller)
 else
   Result := cntSyngletonObject;
end;

initialization
 TMySingletonObjectFactory.Create(ComServer, TMySingletonObject, Class_MySingletonObject,
   ciMultiInstance, tmApartment);
end.


НЕ то что бы КОД не работает, дело в другом - при повторном вызов е CreateComObject создаётся новый объект. ;( почему?


 
Digitman ©   (2005-09-05 18:40) [1]


> почему?


потому что ты сам сказал своей фабрике - ciMultiInstance


 
Digitman ©   (2005-09-05 18:48) [2]


> при повторном вызов е CreateComObject


в контексте одного и того же процесса ? или из разных процессов ?


 
kblc ©   (2005-09-05 18:48) [3]

ciSingleInstance && tmSingle ничего не меняют!


 
kblc ©   (2005-09-05 18:50) [4]

Все вызовы происходят из одного процесса


 
kblc ©   (2005-09-05 20:02) [5]

Люди подскажите что я делаю не так?


 
kblc ©   (2005-09-06 09:03) [6]

Неужели никто не знает?


 
Digitman ©   (2005-09-06 09:07) [7]

покажи код контроллера ..


 
kblc ©   (2005-09-06 09:36) [8]

IMySingletonObject = interface
 function Status: WideString; stdcall;
end;

TIMySingletonObject = class(TComObject, IMySingletonObject)
   procedure Initialize; override;
 private
   prStatus: WideString;
 protected
   function Status: WideString; virtual; stdcall;
end;

procedure TIMySingletonObject.Initialize;
begin
 inherited;
 prStatus:=TimeToStr(Time);
end;

function TIMySingletonObject.Status: WideString;
begin
 Result:=prStatus;
end;


Использую так:

 c1:=CreateComObject(Class_Singleton) as IMySingletonObject;
 Sleep(1000); // на всякий случай, что бы точно проверить их время создания
 c2:=CreateComObject(Class_Singleton) as IMySingletonObject;
 if string(c1.Status) = string(c2.Status) then
 Urrrrraaaa else
 FackinPeaceOfShit;


 
Digitman ©   (2005-09-06 09:51) [9]


> if cntSyngletonObject = nil then


условие cntSyngletonObject = nil у тебя всегда истинно


 
kblc ©   (2005-09-06 09:58) [10]

> Digitman ©   (06.09.05 09:51) [9]
Почему? Не подскажешь как от этого избавится?


 
Digitman ©   (2005-09-06 10:00) [11]


> Почему?


а почему, по твоему, cntSyngletonObject может быть не-nil ?

где в твоем коде присвоение не-nil-значения этой переменной ?


 
kblc ©   (2005-09-06 10:52) [12]

Переписал:

function TMySingletonObjectFactory.CreateComObject(const Controller: IUnknown): TComObject;
begin
if cntSyngletonObject = nil then
begin
  Result := inherited CreateComObject (Controller);
  cntSyngletonObject:=Result;
end else
  Result := cntSyngletonObject;
end;

Результет тот же... :(


 
Digitman ©   (2005-09-06 11:10) [13]

ну тогда отладчик в руки - и вперед


 
kblc ©   (2005-09-06 12:22) [14]

А вот вопрос:
 Если я попытаюсь создать совершенно другой СОМ-сервер этой же фабрикой, то он создастся или всё же выдаст мне предыдушее значение (т.е. другого СОМ-сервера)?


 
isasa ©   (2005-09-06 12:51) [15]

TMySingletonObject = class(TComObject, IMySingletonObject)
->
TMySingletonObject = class(TAutoObject, IMySingletonObject)

?


 
kblc ©   (2005-09-06 12:58) [16]

Просто я не использую OLE атоматизацию


 
kblc ©   (2005-09-06 14:40) [17]

АУ!!! Люди, помогите ответить на вопрос: kblc ©   (06.09.05 12:22) [14]


 
Erik1 ©   (2005-09-07 16:21) [18]

Ты лучше приведи пример работы с фабрикой, а то неочень понятно в чем проблема.



Страницы: 1 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.05 c
8-1116226738
anat
2005-05-16 10:58
2005.10.02
OpenGl need HELP


5-1100848833
Lisii
2004-11-19 10:20
2005.10.02
Таймер в компоненте


14-1126519884
Tesla
2005-09-12 14:11
2005.10.02
Virtual TreeView, помогите разобраться с лицензиями.


14-1124935499
Aero
2005-08-25 06:04
2005.10.02
Интернет-магазин. С чего начать?


1-1126524266
lauren
2005-09-12 15:24
2005.10.02
forms