Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > GetActiveObject ROT Операция недоступна


Автор: creasysee 13.9.2007, 17:16
Есть следующая проблема: Есть приложение Vasya, имеющее, интерфес Vasya.Application.
Все хорошо, если приложение нормальное и нормально при старте прописывает себя в ROT (Running Object Table), а как известно, метод GetActiveObject берет инфу именно оттуда. Но приложение Vasya (оно серьезное и широко известное, поэтому я его здесь не называю) написано $%#$%$%-ми людьми и в ROT себя не прописывает. Как следствие, метод GetActiveObject возвращает для запущенного Vasya - "0x800401e3 Операция недоступна", как будто бы Vasya и не запущено вовсе.
На всякий случай привожу фрагмент кода как я это делаю:
Код

 IVasyaPtr pVasya = NULL;
 IUnknown *pUnk=NULL;
 AfxEnableControlContainer();
 CoInitialize(NULL);
 CLSID    sCLSID;
 HRESULT hr = AfxGetClassIDFromString("Vasya.Application", &sCLSID);
 // Если делать так:
 hr = GetActiveObject(sCLSID, NULL, &pUnk);    
 // Или так:
 hr = pVasya.GetActiveObject(sCLSID);
 // hr всегда равен 0x800401e3 "Операция недоступна".

Поэтому есть идеи получить id процесса, например через найденный hWnd главного окна приложения Vasya, но как потом получить интерфейс приложения всеравно не понятно.
Есть какие-нибудь идеи????
 

Автор: миг 17.11.2016, 19:56
кстати может кому пригодиться. https://support.microsoft.com/en-us/kb/238610

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)