QAxAggregated 类是实现额外 COM 接口的抽象基类。 更多...
头: | #include <QAxAggregated> |
CMake: |
find_package(Qt6 COMPONENTS AxServer REQUIRED)
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 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.