Класс 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