Re[3]: Как получить интерфейс у приложения, запущенного дваж
От: Jolly Roger  
Дата: 22.04.10 08:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Получается, что мне нужно сделать еще интерфейс(пусть будет IManager), в котором будут все указатели интерфейсов приложений, запущенных несколько раз. А в приложениях в конструкторе компонента(или при запросе интерфейса) надо будет добавлять указатель в список IManagerа, а деструкторе удалять. И передача указателей через IManager происходить должа через маршалинг. Примерно так?


Вам принципиально использовать обёртки RegisterActiveObject и GetActiveObject? Потому как если спуститься до уровня IRunningObjectTable, то Ваша задача решается довольно просто. Создаёте уникальную строку для моникёра, что-нибудь типа "CurrentProcessId-CLSID_MYOBJ" и регистрируете вызовом IRunningObjectTable::Register. На клиенте получаете енумератор (IRunningObjectTable::EnumRunning), перебираете моникёры, получаете их строки (IMoniker::GetDisplayName) и ищите в них строку с CLSID Вашего объекто. Нашли — значит это Ваш объект. Теперь его можно получить вызовом IRunningObjectTable::GetObject.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.