Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.005 c
1-1126526856
infom
2005-09-12 16:07
2005.10.02
Выполнение команды после билда.


1-1126074951
V-A-V
2005-09-07 10:35
2005.10.02
Как отловить запуск и завершение.


1-1126248048
polar
2005-09-09 10:40
2005.10.02
Создание связного списка


1-1126593047
Leonid
2005-09-13 10:30
2005.10.02
Установка прав доступа


1-1126614631
Tor
2005-09-13 16:30
2005.10.02
Пауза без остановки процесса типа Sleep





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский