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. 的商标。所有其他商标均为各自所有者的财产。