QAxFactory Class

QAxFactory クラスは、COM コンポーネントを作成するためのファクトリーを定義します。詳細...

Header: #include <QAxFactory>
CMake: find_package(Qt6 REQUIRED COMPONENTS AxServer)
target_link_libraries(mytarget PRIVATE Qt6::AxServer)
qmake: QT += axserver

マクロ

QAXCLASS(Class)
QAXFACTORY_BEGIN(IDTypeLib, IDApp)
QAXFACTORY_END
QAXFACTORY_EXPORT(Class, LibID, AppID)
QAXTYPE(Class)

詳細説明

このファクトリーを COM サーバーで一度実装し、サーバーが作成できるコンポーネントに関する情報を提供します。QAxFactory をサブクラス化し、任意の実装ファイル(main.cpp など)で純粋仮想関数を実装し、QAXFACTORY_EXPORT() マクロを使用してファクトリーをエクスポートします。

QStringList ActiveQtFactory::featureList() const
{
    QStringList list;
    list << "ActiveX1";
    list << "ActiveX2";
    return list;
}

QObject *ActiveQtFactory::createObject(const QString &key)
{
    if (key == "ActiveX1")
        return new ActiveX1(parent);
    if (key == "ActiveX2")
        return new ActiveX2(parent);
    return 0;
}

const QMetaObject *ActiveQtFactory::metaObject(const QString &key) const
{
    if (key == "ActiveX1")
        return &ActiveX1::staticMetaObject;
    if (key == "ActiveX2")
        return &ActiveX2::staticMetaObject;
}

QUuid ActiveQtFactory::classID(const QString &key) const
{
    if (key == "ActiveX1")
        return "{01234567-89AB-CDEF-0123-456789ABCDEF}";
    ...
    return QUuid();
}

QUuid ActiveQtFactory::interfaceID(const QString &key) const
{
    if (key == "ActiveX1")
        return "{01234567-89AB-CDEF-0123-456789ABCDEF}";
    ...
    return QUuid();
}

QUuid ActiveQtFactory::eventsID(const QString &key) const
{
    if (key == "ActiveX1")
        return "{01234567-89AB-CDEF-0123-456789ABCDEF}";
    ...
    return QUuid();
}

QAXFACTORY_EXPORT(
    ActiveQtFactory,                          // factory class
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)

Q_CLASSINFO() マクロを使用してクラスの一意識別子やその他の属性を指定すると、QAXFACTORY_BEGIN()QAXCLASS()QAXFACTORY_END() マクロを使用して、1 つまたは複数のクラスを COM オブジェクトとして公開できます。

QAXFACTORY_BEGIN(
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)
    QAXCLASS(Class1)
    QAXCLASS(Class2)
QAXFACTORY_END()

ActiveX サーバ・アプリケーションによってインスタンス化およびエクスポートできる QAxFactory 実装は 1 つだけです。このインスタンスには、グローバル qAxFactory() 関数からアクセスできます。

ファクトリーは、registerClass() 関数と unregisterClass() 関数を再実装して、レジストリの ActiveX コントロールに追加のフラグを設定することもできます。ウィジェット・クラスが親クラスから公開するメソッドやプロパティの数を制限するには、exposeToSuperClass() を再実装します。

QAxAggregated,QAxBindable,ActiveQt Frameworkも参照してください

マクロ・ドキュメント

QAXCLASS(Class)

このマクロは、QAXFACTORY_BEGIN() マクロで宣言されたQAxFactory に、作成可能な COM クラスClass を追加します。

QAXFACTORY_BEGIN(),QAXTYPE(),QAXFACTORY_END(),Q_CLASSINFO()も参照

QAXFACTORY_BEGIN(IDTypeLib, IDApp)

このマクロは、暗黙的に宣言されたQAxFactory 実装を通して、複数のQObject クラスをエクスポートするために使用できます。すべてのQObject クラスは、Q_CLASSINFO() マクロによって ClassID、InterfaceID、および EventsID (該当する場合) を宣言する必要があります。すべての宣言は、IDTypeLib という ID を持つタイプ・ライブラリに格納され、サーバーが実行可能なサーバーである場合は、IDApp というアプリケーション ID を持つことになります。

このマクロは、QAXCLASS()、QAXTYPE()、QAXFACTORY_END() マクロとともに使用する必要がある。

QAXFACTORY_BEGIN(
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)
    QAXCLASS(Class1)
    QAXCLASS(Class2)
QAXFACTORY_END()

QAXFACTORY_END

QAXFACTORY_BEGIN() マクロで開始したQAxFactory 宣言を完了する。

QAXFACTORY_BEGIN()、QAXCLASS()、QAXTYPE()も参照

QAXFACTORY_EXPORT(Class, LibID, AppID)

このマクロは、COM サーバからQAxFactory 実装Class をエクスポートするために使用できる。すべての宣言はLibID という ID を持つ型ライブラリに格納され、サーバーが実行可能サーバーである場合はAppID というアプリケーション ID を持つことになります。

QAXFACTORY_EXPORT(
    MyFactory,                                // factory class
    "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
    "{01234567-89AB-CDEF-0123-456789ABCDEF}"  // application ID
)

QAXFACTORY_BEGIN()も参照のこと

QAXTYPE(Class)

このマクロは、QAXFACTORY_BEGIN() で宣言されたQAxFactory に、作成不可能な COM クラスClass を追加します。このクラスClass は、QAXTYPE() またはQAXCLASS() によってエクスポートされた他の COM クラスの API で使用できます。

Class 型のインスタンスは、すでにインスタンス化されているオブジェクトの API を使用してのみ取得できます。

QAXFACTORY_BEGIN(),QAXCLASS(),QAXFACTORY_END(),Q_CLASSINFO()も参照してください

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