QAxFactory Class

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

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

パブリック型

enum ServerType { SingleInstance, MultipleInstances }

パブリック関数

QAxFactory(const QUuid &libid, const QUuid &appid)
virtual ~QAxFactory() override
virtual QUuid appID() const
virtual QUuid classID(const QString &key) const
virtual QObject *createObject(const QString &key) = 0
virtual bool createObjectWrapper(QObject *object, IDispatch **wrapper)
virtual QUuid eventsID(const QString &key) const
virtual QString exposeToSuperClass(const QString &key) const
virtual QStringList featureList() const = 0
virtual bool hasStockEvents(const QString &key) const
virtual QUuid interfaceID(const QString &key) const
virtual bool isService() const
virtual const QMetaObject *metaObject(const QString &key) const = 0
virtual void registerClass(const QString &key, QSettings *settings) const
virtual bool stayTopLevel(const QString &key) const
virtual QUuid typeLibID() const
virtual void unregisterClass(const QString &key, QSettings *settings) const
virtual bool validateLicenseKey(const QString &key, const QString &licenseKey) const

静的パブリックメンバ

bool isServer()
bool registerActiveObject(QObject *object)
QString serverDirPath()
QString serverFilePath()
bool startServer(QAxFactory::ServerType type = MultipleInstances)
bool stopServer()

マクロ

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() を再実装します。

QAxAggregatedQAxBindableActiveQt Frameworkも参照してください

メンバ・タイプのドキュメント

enum QAxFactory::ServerType

この列挙型は、startServer で開始できるさまざまなタイプのサーバーを指定します。

定数説明
QAxFactory::SingleInstance0サーバプロセスは、エクスポートされた各クラスのインスタンスを 1 つだけ作成できます。COM は、リクエストごとに新しいプロセスを開始します。これは通常、作成可能なクラスを 1 つだけエクスポートするサーバで使用されます。
QAxFactory::MultipleInstances1サーバは、エクスポートされた各クラスのインスタンスを複数作成できます。これがデフォルトです。すべてのインスタンスは同じスレッドに存在し、静的リソースを共有します。

メンバ関数の説明

QAxFactory::QAxFactory(const QUuid &libid, const QUuid &appid)

それぞれのインターフェース関数の実装でlibidappid を返す QAxFactory オブジェクトを構築します。

[override virtual noexcept] QAxFactory::~QAxFactory()

QAxFactory オブジェクトを破棄します。

[virtual] QUuid QAxFactory::appID() const

この関数を再実装して、ActiveX サーバーのアプリケーション識別子を返します。

[virtual] QUuid QAxFactory::classID(const QString &key) const

featureList() 実装によって返される各key のクラス識別子、またはこのファクトリがkey の値をサポートしていない場合は空のQUuid を返すように、この関数を再実装します。

デフォルトの実装では、key をクラス名として解釈し、Q_CLASSINFO() のエントリ "ClassID" の値を返します。

[pure virtual] QObject *QAxFactory::createObject(const QString &key)

この関数を再実装して、key の新しいオブジェクトを返すか、またはこのファクトリーがkey の値をサポートしていない場合は 0 を返します。

返されたオブジェクトがQWidget の場合は ActiveX コントロールとして公開され、そうでない場合は単純な COM オブジェクトとして公開されます。

[virtual] bool QAxFactory::createObjectWrapper(QObject *object, IDispatch **wrapper)

この関数を再実装して、object の COM オブジェクトをwrapper で提供してください。関数が成功した場合はtrueを返し、失敗した場合はfalseを返します。

デフォルトの実装では、object のメタ・オブジェクト情報に基づいて、汎用オートメーション・ラッパーを作成します。

[virtual] QUuid QAxFactory::eventsID(const QString &key) const

この関数を再実装して、featureList() 実装によって返された各key のイベントインターフェースの識別子、またはこのファクトリーがkey の値をサポートしていない場合は空のQUuid を返します。

デフォルトの実装では、key をクラス名として解釈し、Q_CLASSINFO() のエントリ「EventsID」の値を返します。

[virtual] QString QAxFactory::exposeToSuperClass(const QString &key) const

この関数を再実装して、ActiveX コントロールがメソッドとプロパティを公開するkey までのスーパークラスの名前を返します。

デフォルトの実装では、key をクラス名として解釈し、Q_CLASSINFO() のエントリ "ToSuperClass" の値を返す。そのような値が設定されていない場合、NULL文字列が返され、QWidget を含むすべてのスーパークラスの関数とプロパティが公開されます。

クラス自身の関数とプロパティのみを公開するには、この関数を再実装してkey を返します。

[pure virtual] QStringList QAxFactory::featureList() const

このファクトリーがサポートするウィジェット (クラス名) のリストを返すように、この関数を再実装します。

[virtual] bool QAxFactory::hasStockEvents(const QString &key) const

ActiveX コントロールkey が標準 ActiveX イベントをサポートする必要がある場合は、この関数を再実装して true を返します。

  • クリック
  • DblClick
  • キーダウン
  • キープレス
  • キーアップ
  • マウスダウン
  • マウスアップ
  • マウス移動

デフォルトの実装では、key をクラス名として解釈し、Q_CLASSINFO() エントリ "StockEvents "の値が "yes "の場合、true を返す。そうでない場合、この関数はfalseを返します。

[virtual] QUuid QAxFactory::interfaceID(const QString &key) const

この関数を再実装して、featureList() 実装によって返された各key のインターフェース識別子を返すか、またはこのファクトリーがkey の値をサポートしていない場合は空のQUuid を返します。

デフォルトの実装では、key をクラス名として解釈し、Q_CLASSINFO() のエントリ "InterfaceID" の値を返します。

[static] bool QAxFactory::isServer()

アプリケーションが ActiveX サーバーとして(COM によって)起動されている場合は true を返し、そうでない場合は false を返します。

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    if (!QAxFactory::isServer()) {
        // initialize for stand-alone execution
    }
    return app.exec();
}

[virtual] bool QAxFactory::isService() const

サーバーが永続サービス(NT サービスなど)として実行されており、提供されたすべてのオブジェクトが解放されても終了しない場合は、この関数を再実装して true を返します。

デフォルトの実装は false を返します。

[pure virtual] const QMetaObject *QAxFactory::metaObject(const QString &key) const

key に対応するQMetaObject を返すようにこの関数を再実装するか、またはこのファクトリーがkey の値をサポートしていない場合は 0 を返します。

[static] bool QAxFactory::registerActiveObject(QObject *object)

実行中のオブジェクトとしてQObject object を COM に登録し、登録に成功した場合は true を返し、失敗した場合は false を返します。そうでなければ false を返します。オブジェクトが破棄されると、自動的に登録が解除されます。

この関数は、アプリケーションがユーザーによって起動された場合(つまり、COM がリクエストに応答するためではなく)、1 つのオブジェクト(通常はアプリケーションのオブジェクト階層のトップレベル・オブジェクト)に対してのみ呼び出す必要があります。

RegisterObject "のオブジェクトのクラス情報が "yes "に設定されていない場合、またはサーバーがインプロセスサーバーである場合、この関数は何もせず、falseを返します。

[virtual] void QAxFactory::registerClass(const QString &key, QSettings *settings) const

settings オブジェクトを使用して、システム・レジストリのクラスkey の値を追加登録します。標準的な値はすでにフレームワークによって登録されていますが、追加値、例えば実装されたカテゴリなどは、この関数の実装で追加することができます。

settings->setValue("/CLSID/" + classID(key)
                   + "/Implemented Categories/"
                   + "/{00000000-0000-0000-000000000000}/.",
                   QString());

この関数を再実装する場合は、追加のレジストリ値を削除するためにunregisterClass() も再実装する必要があります。

QSettingsも参照ください

[static] QString QAxFactory::serverDirPath()

サーババイナリを含むディレクトリを返します。

アウトオブプロセスサーバの場合、これはQCoreApplication::applicationDirPath() と同じである。プロセス中サーバの場合、この関数はホスティング・アプリケーションを含むディレクトリを返します。

[static] QString QAxFactory::serverFilePath()

サーバ・バイナリのファイル・パスを返す。

アウトオブプロセス・サーバの場合、これはQCoreApplication::applicationFilePath() と同じである。プロセス内サーバーの場合、この関数はホスト・アプリケーションのファイル・パスを返します。

[static] bool QAxFactory::startServer(QAxFactory::ServerType type = MultipleInstances)

COM サーバをtype で起動し、成功した場合は true を返し、失敗した場合は false を返します。

サーバーがすでに実行されている場合(またはインプロセス・サーバーの場合)にこの関数を呼び出すと、何もせずにtrueが返されます。

サーバの実行ファイルが-activex コマンドラインパラメータで開始されている場合、サーバはMultipleInstances に設定されたtype で自動的に開始されます。SingleInstance に切り替えるには

if (QAxFactory::isServer()) {
    QAxFactory::stopServer();
    QAxFactory::startServer(QAxFactory::SingleInstance);
}

を呼び出します。

[virtual] bool QAxFactory::stayTopLevel(const QString &key) const

この関数を再実装して、ActiveX コントロールkey をダイアログなどのトップ・レベル・ウィンドウにする場合は、true を返します。デフォルトの実装は false を返します。

[static] bool QAxFactory::stopServer()

COMサーバーを停止し、成功すればtrueを返し、そうでなければfalseを返します。

サーバーが実行中でない場合(またはインプロセスサーバーの場合)、この関数を呼び出しても何もせず、true を返します。

サーバーを停止しても既存のオブジェクトは無効になりませんが、既存のサーバープロセスから新しいオブジェクトを作成することはできません。通常、オブジェクトの追加が要求された場合、COMは新しいサーバー・プロセスを開始します。

サーバーは、main() 関数が返ると自動的に停止します。

[virtual] QUuid QAxFactory::typeLibID() const

この関数を再実装して、ActiveX サーバーの型ライブラリ識別子を返します。

[virtual] void QAxFactory::unregisterClass(const QString &key, QSettings *settings) const

settings オブジェクトを使用して、システム・レジストリからクラスkey の追加値の登録を解除します。

settings->remove("/CLSID/" + classID(key)
                 + "/Implemented Categories"
                 + "/{00000000-0000-0000-000000000000}/.");

registerClass() およびQSettingsも参照してください

[virtual] bool QAxFactory::validateLicenseKey(const QString &key, const QString &licenseKey) const

この関数を再実装して、licenseKey がクラスkey の有効なライセンスである場合、または現在のマシンにライセンスが付与されている場合に true を返します。

デフォルトの実装では、クラスkey がライセンスされていない場合 (つまり、Q_CLASSINFO() 属性 "LicenseKey" がない場合)、またはlicenseKey が "LicenseKey" 属性の値と一致する場合、またはマシンがこの COM サーバーと同じファイル名の .LIC ファイルを介してライセンスされている場合に true を返す。

マクロ文書

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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。