QAxAggregated 类

QAxAggregated 类是实现额外 COM 接口的抽象基类。 更多...

头: #include <QAxAggregated>
CMake: find_package(Qt6 REQUIRED COMPONENTS AxServer)
target_link_libraries(mytarget PRIVATE Qt6::AxServer)
qmake: QT += axserver

公共函数

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

保护函数

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

详细描述

创建子类化的 QAxAggregated 并重实现 queryInterface () 以支持额外 COM 接口。使用来自这些 COM 接口的多重继承。实现这些 COM 接口的 IUnknown 接口,是通过将调用委托给 QueryInterface() , AddRef() and Release() 到接口提供通过 controllingUnknown ().

使用 widget () 方法若需要调用 QWidget 实现 ActiveX 控件。不必将该指针存储在子类中 (除非使用 QPointer ),作为 QWidget can be destroyed by the ActiveQt framework at any time.

另请参阅 QAxBindable , QAxFactory ,和 Active Qt .

成员函数文档编制

[virtual constexpr noexcept 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();
}
					

代替手动声明和实现这 3 个函数,可以使用 QAXAGG_IUNKNOWN 宏在子类的类声明中。

[protected] QObject *QAxAggregated:: 对象 () const

返回指针指向 QObject 子类实现 COM 对象。此函数可能返回 0。

警告: 不必存储返回指针,除非使用 QPointer ,由于 QObject can be destroyed by ActiveQt at any time.

[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 can be destroyed by ActiveQt at any time.