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 * | object() const |
QWidget * | widget() const |
详细描述
创建QAxAggregated的子类并重新实现queryInterface()以支持额外的COM接口。使用来自这些COM接口的多重继承。通过委托调用controllingUnknown()提供的接口实现这些COM接口的IUnknown接口。
如果需要调用实现ActiveX控件QWidget的方法,请使用widget()方法。您不得在子类中存储该指针(除非您使用QPointer),因为QWidget可以在任何时候由ActiveQt框架销毁。
另请参阅 QAxBindable、QAxFactory和Active Qt。
成员函数文档
[virtual constexpr noexcept protected]
QAxAggregated::~QAxAggregated()
Qt内部调用析构函数。
[protected]
IUnknown *QAxAggregated::controllingUnknown() const
返回ActiveX控件的IUnknown接口。在您的QAxAggregated子类中实现IUnknown接口,并通过此函数调用提供相应的接口将调用委托给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
宏来自动声明和实现这些三个函数。
[受保护]
QObject *QAxAggregated::object() const
返回实现 COM 对象的 QObject 子类的指针。此函数可能会返回 0。
[纯虚函数]
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 接口,您必须在您的 queryInterface() 实现中不支持 IUnknown
接口。
[受保护]
QWidget *QAxAggregated::widget() const
返回实现 ActiveX 控件的 QWidget 子类的指针。此函数可能会返回 0。
© 2024 The Qt Company Ltd. 本文档中包含的文档贡献是各自所有者的版权。本提供的文档根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款授予许可。Qt 和相应商标是芬兰及/或其他国家/地区的 The Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。