このページでは

QAxAggregated Class

QAxAggregated クラスは、追加の COM インターフェースを実装するための抽象基底クラスです。詳細...

ヘッダー: #include <qaxaggregated.h>
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

プロテクトされた関数

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

詳細な説明

QAxAggregatedのサブクラスを作成し、queryInterface()を再実装して、追加のCOMインターフェースをサポートします。それらのCOMインターフェースからの多重継承を使用します。QueryInterface() 、AddRef() 、およびRelease() への呼び出しを、controllingUnknown()によって提供されるインターフェースに委譲することで、それらのCOMインターフェースのIUnknownインターフェースを実装します。

ActiveX コントロールを実装している `QWidget ` を呼び出す必要がある場合は、`widget()` メソッドを使用してください。`QWidget ` は ActiveQt フレームワークによっていつでも破棄される可能性があるため、そのポインタをサブクラス内に保存してはなりません(`QPointer` を使用する場合を除く)。

QAxBindable 、QAxFactory 、および Active Qtを参照してください。

メンバ関数のドキュメント

[constexpr noexcept protected default] QAxAggregated::QAxAggregated()

QAxAggregated のインスタンスをデフォルトコンストラクタで生成します。

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

これら3つの関数を手動で宣言・実装する代わりに、サブクラスのクラス宣言でQAXAGG_IUNKNOWN マクロを使用することができます。

[protected] QObject *QAxAggregated::object() const

COM オブジェクトを実装する `QObject ` サブクラスへのポインタを返します。この関数は 0 を返す場合があります。

警告: QObject はActiveQtによっていつでも破棄される可能性があるため、QPointer を使用する場合を除き、返されたポインタを保存してはなりません 。

[pure virtual] long QAxAggregated::queryInterface(const QUuid &iid, void **iface)

追加の COM インターフェースをサポートするには、この純粋仮想関数を再実装してください。インターフェース `iid` をサポートするには、`iface ` の値を設定して、このオブジェクトを指すようにしてください。なお、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 (要求されたインターフェースがサポートされていない)を返します。

警告: COM インターフェースを実装する場合はIUnknown インターフェースを実装する必要がありますが、 queryInterface() の実装においてIUnknown インターフェースをサポートしてはなりません。

[protected] QWidget *QAxAggregated::widget() const

ActiveX コントロールを実装する `QWidget ` サブクラスへのポインタを返します。この関数は 0 を返す場合があります。

警告: QWidget はActiveQtによっていつでも破棄される可能性があるため、QPointer を使用する場合を除き、返されたポインタを保存してはなりません 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.