Russian Qt Forum
Апрель 29, 2024, 13:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Узнать, есть ли COM объект  (Прочитано 12386 раз)
Zmey
Гость
« : Февраль 09, 2006, 20:43 »

Как определить, есть ли в системе COM объект {16aa0b9e-79ac-43b5-86ca-ab961fbeed5f} ?
Записан
Makc
Гость
« Ответ #1 : Февраль 10, 2006, 08:52 »

в 4.0.1

        QAxObject ax;
        ax.setControl("{16aa0b9e-79ac-43b5-86ca-ab961fbeed5f}");

        if(ax.isNull())
           //нет объекта
        else
           //есть объект
Записан
Zmey
Гость
« Ответ #2 : Февраль 10, 2006, 12:14 »

Не работает. ax.isNull() всегда возращает true. Пробовал и ax.setControl("{16aa0b9e-79ac-43b5-86ca-ab961fbeed5f}");, и ax.setControl("Photoshop.Application");
Записан
Dimchansky
Гость
« Ответ #3 : Февраль 10, 2006, 18:10 »

Цитата: "Zmey"
Не работает. ax.isNull() всегда возращает true. Пробовал и ax.setControl("{16aa0b9e-79ac-43b5-86ca-ab961fbeed5f}");, и ax.setControl("Photoshop.Application");


Код:
// main.cpp
#include <QAxObject>
#include <qt_windows.h>

int main(int argc, char **argv)
{
    CoInitialize(0);

    QByteArray object("Excel.Application");
    QAxObject axobject(object);
   
    if (axobject.isNull())
    {
        qWarning("Could not instantiate COM object '%s'", object.data());
        return -2;
    }
    else
    {
        qWarning("COM object '%s' instantiated!", object.data());
        return -2;
    }
       
    return 0;
}


файл проекта:
Код:
TEMPLATE = app

CONFIG  += console qaxcontainer

SOURCES += main.cpp


Так работает?

Вместо Excel.Application впишите Excel.IsTheBest. Изменился ответ программы?
Записан
Zmey
Гость
« Ответ #4 : Февраль 11, 2006, 16:17 »

Спасибо. Понял, в чем ошибся. Я писал OleInitialize(NULL); после QAxObject ax;
Записан
Dimchansky
Гость
« Ответ #5 : Февраль 11, 2006, 16:46 »

Цитата: "Zmey"
Спасибо. Понял, в чем ошибся. Я писал OleInitialize(NULL); после QAxObject ax;


Не за что.  Улыбающийся
Код я выдрал из dumpdoc. Все ответы в исходниках.  :wink:
Записан
Zmey
Гость
« Ответ #6 : Февраль 11, 2006, 18:36 »

А можно сделать так, чтобы этот код не загружал Excel?
Записан
Dimchansky
Гость
« Ответ #7 : Февраль 11, 2006, 20:16 »

Цитата: "Zmey"
А можно сделать так, чтобы этот код не загружал Excel?


В смысле не загружал? А разве при запуске этого кода запускается и окно Excell? Не должно этого происходить. Ведь при зауске программы :
Код:
dumpdoc Excell.Application

выводится документация по методам Excell.Application, a сам Excell не запускается.
Или ты имеешь ввиду, чтобы в системе даже не создавалось невидимых объектов Excell.Application (хотя я в этом не уверен)? Тогда может имеет смыл посмотреть на ключи в реестре, как это делается в примере Qt\4.1.0\tools\activeqt\testcon?
Записан
Zmey
Гость
« Ответ #8 : Февраль 11, 2006, 20:42 »

Насчет Excel не знаю, но Photoshop CS2, InDesign CS2 загружаются, появляется окно. Illustrator CS2 загружается, но окна нет. А грузятся они долго. Сделал через чтение из реестра, если не получится через QAxObject или типа того, то придется оставить так.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 20.