Здравствуйте Аноним, Вы писали:
А>Zapustil server s ATL_DEBUG_QI.
А>I sdelal kliyent kotoriy kajdiy raz otkrivayet connection (ispolzuya smartpointer), zapuskayet method i zakrivayet connection. i tak beskonechno.
А>Vot log na servere:
А>CDCMod — IUnknown
А>CDCMod — IMarshal — failed
А>CDCMod — {0000001B-0000-0000-C000-000000000046} — failed
А>CDCMod — IUnknown
А>CDCMod — IStdMarshalInfo — failed
А>CDCMod — IExternalConnection — failed
А>CDCMod — IRunnableObject — failed
А>CDCMod — IDCMod
А>CDCMod — IDCMod
А>CDCMod — {1C733A30-2A1C-11CE-ADE5-00AA0044773D} — failed
А>CDCMod — IDCMod
А>CDCMod — IDCMod
А>CComClassFactory — IClassFactory
А>Mojet eto chto-nibud obyasnit,
Довольно малоинформативно. Я так понимаю IDCMod и есть тот интерфейс?
Судя по всему указатель на него нормально создается и освобождается.
Хотя для полной уверенности нужно еще ATL_DEBUG_REFCOUNT продекларировать.
Он покажет счетчик ссылок.
Еще это неплохо прогнать для реальных клиентов. Или смоделировать, на тестовых клиентах,
одновременный вызов.
>- серверный объект создается новый, при новом подключении, или используется
>один и тотже экземпляр?
>mne ochen interesno. Kakaya raznica? I kak eto viyasnit. Ya dumal raz u tebya exe-com service to vseqda odin i >tot je ekzemplyar. Ili ya oshibayus?
Я хотел узнать singleton он или нет. Это зависит от фабрики класса.
Чтобы в ATL сделать такой объект достаточно в определении класса добавить
DECLARE_CLASSFACTORY_SINGLETON(CYourClass)
Разница в том, что объект не будет каждый раз создаваться заново и разрушаться для каждого клиента,
а будет использоваться один и тотже. Т.е. много лишних действий выполняться не будут.
Если объект обеспечивает только доступ к общему хранилищу и не хранит данных специфичных для клиента,
то это имеет смысл.