QAxAggregated Class

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

Header: #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 インタフェースからの多重継承を使用します。QueryInterface()AddRef()Release() への呼び出しをcontrollingUnknown() によって提供されるインターフェースに委譲することによって、これらの COM インターフェースの IUnknown インターフェースを実装します。

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

QAxBindableQAxFactoryActive 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();
}

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

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

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

警告: QPointer QObject は ActiveQt によっていつでも破棄される可能性があるためです。

[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 (要求されたインタフェースがサポートされていない)を返します。

警告: IUnknown どの COM インタフェースを実装する場合でも、IUnknown インタフェースを実装しなければなりません。

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

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

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

ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。