Spec-Zone.ru › Qt 5.14

Класс QAxAggregated

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

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

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

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

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

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

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

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

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

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

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

[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.14/qaxaggregated.html

Spec-Zone.ru

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