Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > GetActiveObject из DLL


Автор: CompWorm 18.5.2008, 23:11
Приветствую!

помогите плz разобраться в проблеме...
вот 2 варианта использования GetActiveOleObject. оба рабочие, проверял:

вариант 1
Код

var OleVObj:OleVariant;
...
OleVObj:=GetActiveOleObject('тут название того, что ловим');
...


вариант 2
Код

var OleVObj:OleVariant;
      IU: IUnknown;
      ClassID: TCLSID;
...
CLSIDFromProgID(PWideChar(WideString('тут название того, что ловим')), ClassID);
if Succeeded(GetActiveObject(ClassID, nil, IU)) then
OleVObj:= IU as IDispatch;
...


возможно, во втором варианте что-то забыл, но не в том суть  smile 
суть вот в чем:
оба варианта работают, и в обычном приложении в переменную OleVObj успешно попадает указатель на некоторое открытое приложение.
а вот если этот код тупо скопировать в DLL то ничего не ловится, 
однако из DLL отлично работает 
Код

    CoInitialize(0);   
    OleVObj:=CreateOleObject('тут название того, что запускаем');

(не совсем уверен, что делает CoInitialize, но вроде как связывает COM объект с приложением
и в ДЛЛ он сильно нужен)

вопрос:
как заставить GetActiveObject работать из DLL ?

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