Spec-Zone.ru › Qt 5.11

Класс QAxFactory

Класс QAxFactory определяет фабрику для создания компонентов COM. Подробнее...

Заголовок: #include <QAxFactory>
qmake: QT += axserver
Наследуется от: QObject
  • Список всех членов, включая унаследованные

Типы public

перечисление ServerType { SingleInstance, MultipleInstances }

Функции public

QAxFactory(const QUuid &libid, const QUuid &appid)
virtual ~QAxFactory()
virtual QUuid appID() const
virtual QUuid classID(const QString &key) const
virtual QObject * createObject(const QString &key) = 0
virtual bool createObjectWrapper(QObject *object, IDispatch **wrapper)
virtual QUuid eventsID(const QString &key) const
virtual QString exposeToSuperClass(const QString &key) const
virtual QStringList featureList() const = 0
virtual bool hasStockEvents(const QString &key) const
virtual QUuid interfaceID(const QString &key) const
virtual bool isService() const
virtual const QMetaObject * metaObject(const QString &key) const = 0
virtual void registerClass(const QString &key, QSettings *settings) const
virtual bool stayTopLevel(const QString &key) const
virtual QUuid typeLibID() const
virtual void unregisterClass(const QString &key, QSettings *settings) const
virtual bool validateLicenseKey(const QString &key, const QString &licenseKey) const
  • 34 функции public, унаследованные от QObject

Статические члены public

bool isServer()
bool registerActiveObject(QObject *object)
QString serverDirPath()
QString serverFilePath()
bool startServer(QAxFactory::ServerType type = MultipleInstances)
bool stopServer()
  • 10 статических членов public, унаследованных от QObject

Макросы

QAXCLASS(Class)
QAXFACTORY_BEGIN(IDTypeLib, IDApp)
QAXFACTORY_DEFAULT(Class, ClassID, InterfaceID, EventID, LibID, AppID)
QAXFACTORY_END
QAXFACTORY_EXPORT(Class, LibID, AppID)
QAXTYPE(Class)

Дополнительные унаследованные члены

  • 1 свойство, унаследованное от QObject
  • 1 public slot, унаследованный от QObject
  • 2 сигнала, унаследованные от QObject
  • 1 public переменная, унаследованная от QObject
  • 9 защищённых функций, унаследованных от QObject
  • 2 защищённых переменных, унаследованных от QObject

Подробное описание

Класс QAxFactory определяет фабрику для создания компонентов COM.

Реализуйте эту фабрику один раз в вашем сервере COM, чтобы предоставить информацию о компонентах, которые может создать сервер. Наследуйте от QAxFactory и реализуйте чистые виртуальные функции в любом файле реализации (например, main.cpp), а также экспортируйте фабрику, используя макрос QAXFACTORY_EXPORT().

QStringList ActiveQtFactory::featureList() const
{
    QStringList list;
    list << "ActiveX1";
    list << "ActiveX2";
    return list;
}

QObject *ActiveQtFactory::createObject(const QString &key)
{
    if (key == "ActiveX1")
        return new ActiveX1(parent);
    if (key == "ActiveX2")
        return new ActiveX2(parent);
    return 0;
}

const QMetaObject *ActiveQtFactory::metaObject(const QString &key) const
{
    if (key == "ActiveX1")
        return &ActiveX1::staticMetaObject;
    if (key == "ActiveX2")
        return &ActiveX2::staticMetaObject;
}

QUuid ActiveQtFactory::classID(const QString &key) const
{
    if (key == "ActiveX1")
        return "{01234567-89AB-CDEF-0123-456789ABCDEF}";
    ...
    return QUuid();
}

QUuid ActiveQtFactory::interfaceID(const QString &key) const
{
    if (key == "ActiveX1")
        return "{01234567-89AB-CDEF-0123-456789ABCDEF}";
    ...
    return QUuid();
}

QUuid ActiveQtFactory::eventsID(const QString &key) const
{
    if (key == "ActiveX1")
        return "{01234567-89AB-CDEF-0123-456789ABCDEF}";
    ...
    return QUuid();
}

QAXFACTORY_EXPORT(
    ActiveQtFactory,                          // factory class
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)

Если вы используете макрос Q_CLASSINFO() для предоставления уникальных идентификаторов или других атрибутов для вашего класса, вы можете использовать макросы QAXFACTORY_BEGIN(), QAXCLASS() и QAXFACTORY_END() для экспонирования одного или нескольких классов как объектов COM.

QAXFACTORY_BEGIN(
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)
    QAXCLASS(Class1)
    QAXCLASS(Class2)
QAXFACTORY_END()

Если ваш сервер поддерживает только один объект COM, вы можете использовать реализацию фабрики по умолчанию через макрос QAXFACTORY_DEFAULT().

#include <qapplication.h>
#include <qaxfactory.h>

#include "theactivex.h"

QAXFACTORY_DEFAULT(
    TheActiveX,                               // widget class
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // class ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // interface ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // event interface ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)

Только одна реализация QAxFactory может быть создана и экспортирована приложением сервера ActiveX. Этот экземпляр доступен через глобальную функцию qAxFactory().

Фабрика также может переопределять функции registerClass() и unregisterClass() для установки дополнительных флагов для ActiveX-элемента в реестре. Чтобы ограничить количество методов или свойств, которые класс виджета получает от своих родительских классов, переопределите exposeToSuperClass().

См. также QAxAggregated, QAxBindable и Фреймворк ActiveQt.

Документация по типу члена

перечисление QAxFactory::ServerType

Это перечисление определяет различные типы серверов, которые могут быть запущены с помощью startServer.

Константа Значение Описание
QAxFactory::SingleInstance 0 Процесс сервера может создать только один экземпляр каждого экспортированного класса. COM запускает новый процесс для каждого запроса. Это обычно используется в серверах, которые экспортируют только один класс, который можно создать.
QAxFactory::MultipleInstances 1 Сервер может создавать несколько экземпляров каждого экспортированного класса. Это значение по умолчанию. Все экземпляры будут жить в одном потоке и будут совместно использовать статические ресурсы.

Документация по функциям-членам

QAxFactory::QAxFactory(const QUuid &libid, const QUuid &appid)

Конструктор объекта QAxFactory, который возвращает libid и appid в реализации соответствующих функций интерфейса.

[virtual] QAxFactory::~QAxFactory()

Уничтожает объект QAxFactory.

[virtual] QUuid QAxFactory::appID() const

Переопределите эту функцию для возвращения идентификатора приложения сервера ActiveX.

[virtual] QUuid QAxFactory::classID(const QString &key) const

Переопределите эту функцию для возвращения идентификатора класса для каждого ключа key, возвращаемого реализацией featureList(), или пустого QUuid, если этот фабрика не поддерживает значение key.

По умолчанию реализация интерпретирует key как имя класса и возвращает значение записи Q_CLASSINFO() "ClassID".

[pure virtual] QObject *QAxFactory::createObject(const QString &key)

Переопределите эту функцию для возвращения нового объекта для key или 0, если этот фабрика не поддерживает значение key.

Если возвращаемый объект является QWidget, он будет представлен как элемент управления ActiveX, в противном случае возвращаемый объект будет представлен как простой объект COM.

[virtual] bool QAxFactory::createObjectWrapper(QObject *object, IDispatch **wrapper)

Переопределите эту функцию, чтобы предоставить объект COM для object в wrapper. Возвратите true, если функция выполнилась успешно; в противном случае верните false.

По умолчанию реализация создаёт общий оболочку автоматизации на основе метаобъектной информации object.

[virtual] QUuid QAxFactory::eventsID(const QString &key) const

Переопределите эту функцию, чтобы вернуть идентификатор интерфейса события для каждого ключа key, возвращаемого реализацией featureList(), или пустой QUuid, если этот фабрика не поддерживает значение key.

По умолчанию реализация интерпретирует key как имя класса и возвращает значение записи Q_CLASSINFO() "EventsID".

[virtual] QString QAxFactory::exposeToSuperClass(const QString &key) const

Переопределите эту функцию, чтобы вернуть имя родительского класса key, до которого методы и свойства должны быть экспонированы элементом управления ActiveX.

По умолчанию реализация интерпретирует key как имя класса и возвращает значение записи Q_CLASSINFO() "ToSuperClass". Если такого значения нет, возвращается пустая строка, и методы и свойства всех родительских классов, включая QWidget, будут экспонированы.

Чтобы экспонировать только методы и свойства самого класса, переопределите эту функцию для возвращения key.

[pure virtual] QStringList QAxFactory::featureList() const

Переопределите эту функцию для возвращения списка виджетов (имен классов), поддерживаемых этим фабрикой.

[virtual] bool QAxFactory::hasStockEvents(const QString &key) const

Переопределите эту функцию, чтобы вернуть true, если элемент управления ActiveX key должен поддерживать стандартные события ActiveX

  • Click
  • DblClick
  • KeyDown
  • KeyPress
  • KeyUp
  • MouseDown
  • MouseUp
  • MouseMove

По умолчанию реализация интерпретирует key как имя класса и возвращает true, если значение записи Q_CLASSINFO() "StockEvents" равно "yes". В противном случае функция возвращает false.

[virtual] QUuid QAxFactory::interfaceID(const QString &key) const

Переопределите эту функцию для возвращения идентификатора интерфейса для каждого ключа key, возвращаемого реализацией featureList(), или пустого QUuid, если этот фабрика не поддерживает значение key.

По умолчанию реализация интерпретирует key как имя класса и возвращает значение записи Q_CLASSINFO() "InterfaceID".

[static] bool QAxFactory::isServer()

Возвращает true, если приложение было запущено (COM) как сервер ActiveX, в противном случае возвращает false.

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    if (!QAxFactory::isServer()) {
        // initialize for stand-alone execution
    }
    return app.exec();
}

[virtual] bool QAxFactory::isService() const

Переопределите эту функцию для возвращения true, если сервер работает как постоянная служба (например, служба NT) и не должен завершаться даже когда все предоставленные объекты были освобождены.

По умолчанию реализация возвращает false.

[pure virtual] const QMetaObject *QAxFactory::metaObject(const QString &key) const

Переопределите эту функцию, чтобы вернуть QMetaObject, соответствующий key, или 0, если этот фабрика не поддерживает значение key.

[static] bool QAxFactory::registerActiveObject(QObject *object)

Регистрирует QObject object в COM как работающий объект и возвращает true, если регистрация прошла успешно, в противном случае возвращает false. Объект автоматически аннулируется при его уничтожении.

Эта функция должна вызываться только в том случае, если приложение было запущено пользователем (то есть не COM для ответа на запрос) и только для одного объекта, обычно для главного объекта иерархии объектов приложения.

Эта функция ничего не делает и возвращает false, если информация о классе объекта для "RegisterObject" не установлена на "yes", или если сервер является сервером в процессе.

[virtual] void QAxFactory::registerClass(const QString &key, QSettings *settings) const

Регистрирует дополнительные значения для класса key в системном реестре с использованием объекта settings. Стандартные значения уже зарегистрированы фреймворком, но дополнительные значения, например, реализованные категории, могут быть добавлены в реализации этой функции.

settings->setValue("/CLSID/" + classID(key)
                   + "/Implemented Categories/"
                   + "/{00000000-0000-0000-000000000000}/.",
                   QString());

Если вы переопределяете эту функцию, вы также должны переопределить unregisterClass() для удаления дополнительных значений из реестра.

См. также QSettings.

[static] QString QAxFactory::serverDirPath()

Возвращает каталог, содержащий двоичный файл сервера.

Для серверов вне процесса это то же, что и QCoreApplication::applicationDirPath(). Для серверов в процессе эта функция возвращает каталог, содержащий приложение-хост.

[static] QString QAxFactory::serverFilePath()

Возвращает путь к файлу двоичного файла сервера.

Для серверов вне процесса это то же, что и QCoreApplication::applicationFilePath(). Для серверов в процессе эта функция возвращает путь к файлу приложения-хоста.

[static] bool QAxFactory::startServer(QAxFactory::ServerType type = MultipleInstances)

Запускает сервер COM с type и возвращает true при успехе, в противном случае возвращает false.

Вызов этой функции, если сервер уже запущен (или для сервера в процессе), ничего не делает и возвращает true.

Сервер запускается автоматически с type, установленным на MultipleInstances, если исполняемый файл сервера был запущен с параметром командной строки -activex. Для переключения на SingleInstance вызовите

if (QAxFactory::isServer()) {
    QAxFactory::stopServer();
    QAxFactory::startServer(QAxFactory::SingleInstance);
}

в вашей собственной функции main().

[virtual] bool QAxFactory::stayTopLevel(const QString &key) const

Переопределите эту функцию, чтобы вернуть true, если элемент управления ActiveX key должен быть главным окном, например, диалоговым окном. По умолчанию реализация возвращает false.

[static] bool QAxFactory::stopServer()

Останавливает сервер COM и возвращает true при успехе, в противном случае возвращает false.

Вызов этой функции, если сервер не запущен (или для сервера в процессе), ничего не делает и возвращает true.

Остановка сервера не приведет к аннулированию существующих объектов, но новые объекты не могут быть созданы из существующего процесса сервера. Обычно COM запустит новый процесс сервера, если запрошены дополнительные объекты.

Сервер останавливается автоматически при возвращении функции main().

[virtual] QUuid QAxFactory::typeLibID() const

Переопределите эту функцию для возвращения идентификатора библиотеки типов сервера ActiveX.

[virtual] void QAxFactory::unregisterClass(const QString &key, QSettings *settings) const

Удаляет любые дополнительные значения для класса key из системного реестра с использованием объекта settings.

settings->remove("/CLSID/" + classID(key)
                 + "/Implemented Categories"
                 + "/{00000000-0000-0000-000000000000}/.");

См. также registerClass() и QSettings.

[virtual] bool QAxFactory::validateLicenseKey(const QString &key, const QString &licenseKey) const

Переопределите эту функцию, чтобы она возвращала true, если licenseKey является допустимой лицензией для класса key или если текущая машина лицензирована.

По умолчанию реализация возвращает true, если класс key не лицензирован (т. е. нет атрибута Q_CLASSINFO()"LicenseKey"), или если licenseKey совпадает со значением атрибута "LicenseKey", или если машина лицензирована через файл .LIC с таким же именем файла, как у этого COM-сервера.

Документация макросов

QAXCLASS(Class)

Этот макрос добавляет создаваемый COM-класс Class в объявленный с помощью макроса QAxFactory QAXFACTORY_BEGIN().

См. также QAXFACTORY_BEGIN(), QAXTYPE(), QAXFACTORY_END() и Q_CLASSINFO().

QAXFACTORY_BEGIN(IDTypeLib, IDApp)

Этот макрос может использоваться для экспорта нескольких классов QObject через неявно объявленную реализацию QAxFactory. Все классы QObject должны объявлять ClassID, InterfaceID и EventsID (если применимо) с помощью макроса Q_CLASSINFO(). Все объявления будут в библиотеке типов с идентификатором IDTypeLib, а если сервер — исполняемый сервер, то у него будет идентификатор приложения IDApp.

Этот макрос необходимо использовать вместе с макросами QAXCLASS(), QAXTYPE() и QAXFACTORY_END().

QAXFACTORY_BEGIN(
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)
    QAXCLASS(Class1)
    QAXCLASS(Class2)
QAXFACTORY_END()

QAXFACTORY_DEFAULT(Class, ClassID, InterfaceID, EventID, LibID, AppID)

Этот макрос можно использовать для экспорта одного подкласса QObject Class на этом COM-сервере через неявно объявленную реализацию QAxFactory.

Этот макрос экспортирует класс Class как COM-кокласс с CLSID ClassID. Свойства и слоты будут объявлены через COM-интерфейс с IID InterfaceID, а сигналы — через COM-интерфейс событий с IID EventID. Все объявления будут в библиотеке типов с идентификатором LibID, а если сервер — исполняемый сервер, то у него будет идентификатор приложения AppID.

#include <qaxfactory.h>

#include "theactivex.h"

QAXFACTORY_DEFAULT(
    TheActiveX,                               // widget class
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // class ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // interface ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // event interface ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)

См. также QAXFACTORY_EXPORT() и QAXFACTORY_BEGIN().

QAXFACTORY_END

Завершает объявление QAxFactory, начатое макросом QAXFACTORY_BEGIN().

См. также QAXFACTORY_BEGIN(), QAXCLASS() и QAXTYPE().

QAXFACTORY_EXPORT(Class, LibID, AppID)

Этот макрос можно использовать для экспорта реализации QAxFactory Class из COM-сервера. Все объявления будут в библиотеке типов с идентификатором LibID, а если сервер — исполняемый сервер, то у него будет идентификатор приложения AppID.

QAXFACTORY_EXPORT(
    MyFactory,                                // factory class
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)

См. также QAXFACTORY_BEGIN().

QAXTYPE(Class)

Этот макрос добавляет несоздаваемый COM-класс Class в объявленную с помощью макроса QAxFactory QAXFACTORY_BEGIN(). Класс Class может использоваться в API других COM-классов, экспортированных с помощью QAXTYPE() или QAXCLASS().

Экземпляры типа Class могут быть получены только с помощью API уже созданных объектов.

См. также QAXFACTORY_BEGIN(), QAXCLASS(), QAXFACTORY_END() и Q_CLASSINFO().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qaxfactory.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API