Russian Qt Forum

Qt => ActiveX => Тема начата: Zmey от Февраль 09, 2006, 20:43



Название: Узнать, есть ли COM объект
Отправлено: Zmey от Февраль 09, 2006, 20:43
Как определить, есть ли в системе COM объект {16aa0b9e-79ac-43b5-86ca-ab961fbeed5f} ?


Название: Узнать, есть ли COM объект
Отправлено: Makc от Февраль 10, 2006, 08:52
в 4.0.1

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

        if(ax.isNull())
           //нет объекта
        else
           //есть объект


Название: Узнать, есть ли COM объект
Отправлено: Zmey от Февраль 10, 2006, 12:14
Не работает. ax.isNull() всегда возращает true. Пробовал и ax.setControl("{16aa0b9e-79ac-43b5-86ca-ab961fbeed5f}");, и ax.setControl("Photoshop.Application");


Название: Узнать, есть ли COM объект
Отправлено: Dimchansky от Февраль 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. Изменился ответ программы?


Название: Узнать, есть ли COM объект
Отправлено: Zmey от Февраль 11, 2006, 16:17
Спасибо. Понял, в чем ошибся. Я писал OleInitialize(NULL); после QAxObject ax;


Название: Узнать, есть ли COM объект
Отправлено: Dimchansky от Февраль 11, 2006, 16:46
Цитата: "Zmey"
Спасибо. Понял, в чем ошибся. Я писал OleInitialize(NULL); после QAxObject ax;


Не за что.  :)
Код я выдрал из dumpdoc. Все ответы в исходниках.  :wink:


Название: Узнать, есть ли COM объект
Отправлено: Zmey от Февраль 11, 2006, 18:36
А можно сделать так, чтобы этот код не загружал Excel?


Название: Узнать, есть ли COM объект
Отправлено: Dimchansky от Февраль 11, 2006, 20:16
Цитата: "Zmey"
А можно сделать так, чтобы этот код не загружал Excel?


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

выводится документация по методам Excell.Application, a сам Excell не запускается.
Или ты имеешь ввиду, чтобы в системе даже не создавалось невидимых объектов Excell.Application (хотя я в этом не уверен)? Тогда может имеет смыл посмотреть на ключи в реестре, как это делается в примере Qt\4.1.0\tools\activeqt\testcon?


Название: Узнать, есть ли COM объект
Отправлено: Zmey от Февраль 11, 2006, 20:42
Насчет Excel не знаю, но Photoshop CS2, InDesign CS2 загружаются, появляется окно. Illustrator CS2 загружается, но окна нет. А грузятся они долго. Сделал через чтение из реестра, если не получится через QAxObject или типа того, то придется оставить так.