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

Вниз

Чайниковская проблема с Class Factory   Найти похожие ветки 

 
Сан Саныч   (2003-08-26 03:12) [0]

Помогите :) Есть программа, реализованная в виде
in-process (dll) ole automation server-а, которая
при запуске (init) спрашивает пароль у юзера и
далее использует этот пароль во всех выданных
клиентских объектах (через CoCreate) для работы с
зашифрованными ресурсами. Т.е. идея в том, что он,
пароль, спрашивается только 1 раз, и далее объекты
могут создаваться где угодно и будут использовать
этот общий пароль без повторных запросов.
Все бы хорошо, когда оно используется в одной
программе, т.е. легко создается массив объектов,
пароль спрашивается 1 раз (при первом создании).
Но если параллельно запустить 2-ю копию клиента -
то пароль спрашивается еще раз, т.е. опять идет
инициализация класс фактори, в ней пароль пустой
и он спрашивается еще раз :( что делать ?
Немного сумбурно, извините, но нужно чтобы неважно
где создавались объекты, в моих ли приложениях или
скажем в ИЕ, но пароль спрашивался бы только в том
случае если refCount созданных объектов был = 0
х.е.л.п. :)


 
Palladin ©   (2003-08-26 09:19) [1]


> только в том
> случае если refCount созданных объектов был = 0

ну вот же, ты сам указал условие...
спрашивай пароль только в этом случае...
иначе пропускай...


 
Сан Саныч   (2003-08-26 10:54) [2]

Так он зараза для каждого запущенного приложения равен 0.
Такое чувство что класс фактори создается для каждого клиента своя.


 
Внук ©   (2003-08-26 11:07) [3]

В качестве предположения.
Если COM-класс написан как Multi-Instance, то так и будет. А если попробовать Single-Instance?


 
Сан Саныч   (2003-08-26 11:40) [4]

Нет, я пробовал поиграться с флагами - не помогло :(


 
Юрий Федоров ©   (2003-08-26 11:44) [5]

В случае in-process (dll) сервер подргужается в адресное пространство клиента, если клиента 2 - то будут 2 копии сервера, разве не так ?
Так что может тут только внешним сервером решится проблема ?


 
Внук ©   (2003-08-26 11:54) [6]

>>Юрий Федоров © (26.08.03 11:44) [5]
Да, слова про in-process server я пропустил :))


 
Skier ©   (2003-08-26 12:01) [7]

Не бейте ногами, но мне кажется что копия для in-process будет одна, но дело в том что, например, все глобальные переменные dll инициализируются
нулями при каждой загрузке библиотеки. Может в этом дело ? Нет ?


 
Erik   (2003-08-26 12:28) [8]

Только внещний exe сервер тебе поможет.
Аминь.


 
Сан Саныч   (2003-08-26 12:51) [9]

А как в дельфи внешние (local?) сервера делать ?
В доках об этом ни слова не нашел, хотя может плохо искал...


 
Юрий Федоров ©   (2003-08-26 12:57) [10]

Создаешь обычный exe, потом запускаешь визард
new -> axtiveX -> automation object


 
Сан Саныч   (2003-08-26 13:20) [11]

спасибо всем :)


 
Erik   (2003-08-26 13:59) [12]

Можно еще подменить библиотеку для класс фактори, на многопоточную. Она у Borland есть и Ben Li делал.


 
Serginio666   (2003-08-26 14:50) [13]

Class Factory будет создана 1, но выдавать ссылки объектов клиенту она будет по разному в зависимости от TThreadingModel.
Можно использовать глобальные переменные DLL или почитать про реализацию синглетона http://www.rsdn.ru/article/atl/atlsingleton.xml
соответсвенно переделав TAutoClassFactory.


 
Serginio666   (2003-08-26 14:59) [14]

Извините, не дочитал, что два разных екзешника. Только внешний сервер.


 
Serginio666   (2003-08-27 18:28) [15]

Можно использовать FileMapping при использовании in-process (dll) ole automation server-а



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

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

Наверх




Память: 0.5 MB
Время: 0.019 c
14-24675
HolACost!
2003-08-20 10:33
2003.09.08
Бонально, но надо - как вывести из консоли cerr!


14-24672
Mike_Goblin
2003-08-20 12:23
2003.09.08
Anekdot.ru - рулит


14-24670
Lamer_of_Delphi
2003-08-20 11:24
2003.09.08
Глюк!!!


14-24694
Mr&MsGuns
2003-08-18 22:58
2003.09.08
Будет ли компьютерная революция?


1-24511
MakNik
2003-08-27 09:27
2003.09.08
TMemo