Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.012 c
1-24546
Андрей Сенченко
2003-08-26 16:29
2003.09.08
Нужно описание подводных камней.


8-24564
wara
2003-05-12 11:35
2003.09.08
Какие данные хранятся вместе с графикой в графических файлах?


1-24520
Коля
2003-08-27 02:25
2003.09.08
ReplaceStr


14-24653
LordOfSilence
2003-08-20 15:30
2003.09.08
Ищу компаньон(а/ов) :-)


1-24510
Дмитрий
2003-08-27 09:06
2003.09.08
BDE не установлен у клиента, а надо бы...




   Наверх