Spec-Zone.ru › Qt 5.12

Класс QAxAggregated

Класс QAxAggregated — это абстрактный базовый класс для реализации дополнительных интерфейсов COM. Подробнее...

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

Открытые функции

virtual long queryInterface(const QUuid &iid, void **iface) = 0

Защищенные функции

QAxAggregated()
virtual ~QAxAggregated()
IUnknown * controllingUnknown() const
QObject * object() const
QWidget * widget() const

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

Класс QAxAggregated — это абстрактный базовый класс для реализации дополнительных интерфейсов COM.

Создайте подкласс QAxAggregated и переопределите queryInterface(), чтобы поддержать дополнительные интерфейсы COM. Используйте множественное наследование от этих интерфейсов COM. Реализуйте интерфейс IUnknown этих интерфейсов COM, делегируя вызовы QueryInterface(), AddRef() и Release() интерфейсу, предоставляемому методом controllingUnknown().

Используйте метод widget(), если вам нужно выполнить вызовы к классу QWidget, реализующему ActiveX-контроль. Не храните этот указатель в вашем подклассе (если не используете QPointer), так как QWidget может быть уничтожен фреймворком ActiveQt в любое время.

См. также QAxBindable, QAxFactory и Active Qt.

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

[protected] QAxAggregated::QAxAggregated()

Конструктор по умолчанию создаёт экземпляр QAxAggregated.

[virtual protected] QAxAggregated::~QAxAggregated()

Деструктор вызывается внутри Qt.

[protected] IUnknown *QAxAggregated::controllingUnknown() const

Возвращает интерфейс IUnknown ActiveX-контроля. Реализуйте интерфейс IUnknown в вашем подклассе QAxAggregated, чтобы делегировать вызовы QueryInterface(), AddRef(), и Release() интерфейсу, предоставляемому этой функцией.

HRESULT AxImpl::QueryInterface(REFIID iid, void **iface)
{
    return controllingUnknown()->QueryInterface(iid, iface);
}

ulong AxImpl::AddRef()
{
    return controllingUnknown()->AddRef();
}

ulong AxImpl::Release()
{
    return controllingUnknown()->Release();
}

Вместо ручного объявления и реализации этих трёх функций, вы можете использовать макрос QAXAGG_IUNKNOWN в объявлении класса вашего подкласса.

[protected] QObject *QAxAggregated::object() const

Возвращает указатель на подкласс QObject, реализующий COM-объект. Эта функция может вернуть 0.

Предупреждение: Не храните возвращённый указатель, если не используете QPointer, так как QObject может быть уничтожен ActiveQt в любое время.

[pure virtual] long QAxAggregated::queryInterface(const QUuid &iid, void **iface)

Переопределите эту чисто виртуальную функцию, чтобы поддержать дополнительные интерфейсы COM. Установите значение iface, чтобы указать на этот объект, для поддержки интерфейса iid. Обратите внимание, что вы должны привести указатель this к соответствующему суперклассу.

long AxImpl::queryInterface(const QUuid &iid, void **iface)
{
    *iface = 0;
    if (iid == IID_ISomeCOMInterface)
        *iface = (ISomeCOMInterface*)this;
    else
        return E_NOINTERFACE;

    AddRef();
    return S_OK;
}

Возвратите стандартные результаты COM S_OK (интерфейс поддерживается) или E_NOINTERFACE (запрошенный интерфейс не поддерживается).

Предупреждение: Даже если вам нужно реализовать интерфейс IUnknown, если вы реализуете какой-либо COM-интерфейс, вы не должны поддерживать интерфейс IUnknown в вашей реализации queryInterface().

[protected] QWidget *QAxAggregated::widget() const

Возвращает указатель на подкласс QWidget, реализующий ActiveX-контроль. Эта функция может вернуть 0.

Предупреждение: Не храните возвращённый указатель, если не используете QPointer, так как QWidget может быть уничтожен ActiveQt в любое время.

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

Spec-Zone.ru

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