Форум: "Основная";
Текущий архив: 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