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