QAxFactory Class
QAxFactory クラスは、COM コンポーネントを作成するためのファクトリーを定義します。詳細...
ヘッダー | #include <QAxFactory> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS AxServer) target_link_libraries(mytarget PRIVATE Qt6::AxServer) |
qmake: | QT += axserver |
継承: | 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() を再実装します。
QAxAggregated 、QAxBindable 、ActiveQt Frameworkも参照してください 。
メンバ型ドキュメント
enum QAxFactory::ServerType
この列挙型は、startServer で起動できるサーバーの種類を指定する。
定数 | 値 | 説明 |
---|---|---|
QAxFactory::SingleInstance | 0 | サーバプロセスは、エクスポートされた各クラスのインスタンスを 1 つだけ作成できます。COM は、リクエストごとに新しいプロセスを開始します。これは通常、作成可能なクラスを 1 つだけエクスポートするサーバで使用されます。 |
QAxFactory::MultipleInstances | 1 | サーバは、エクスポートされた各クラスのインスタンスを複数作成できます。これがデフォルトです。すべてのインスタンスは同じスレッドに存在し、静的リソースを共有します。 |
メンバ関数のドキュメント
QAxFactory::QAxFactory(const QUuid &libid, const QUuid &appid)
libid とappid を返す 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)
wrapper のobject に COM オブジェクトを提供するために、この関数を再実装する。関数が成功した場合は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 を返すようにします。
- クリック
- ダブルクリック
- キーダウン
- キープレス
- キーアップ
- マウスダウン
- マウスアップ
- マウス移動
デフォルトの実装では、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()
アプリケーションが(COMによって)ActiveXサーバーとして起動されていれば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 を返します。オブジェクトが破棄されると、自動的に登録が解除されます。
この関数は、アプリケーションがユーザーによって起動された場合(つまり、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を返します。
サーバの実行ファイルが-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 に対して有効なライセンスである場合、または現在のマシンにライセンスが付与されている場合に真を返します。
デフォルトの実装では、クラス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()も参照 。
© 2025 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.