Класс 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 — это абстрактный базовый класс для реализации дополнительных COM-интерфейсов.
Создайте подкласс 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/archives/qt-5.6/qaxaggregated.html