QAxFactory Class
QAxFactory クラスは、COM コンポーネントを作成するためのファクトリを定義しています。詳細...
| ヘッダー: | #include <qaxfactory.h> |
| 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 サーバー内でこのファクトリを 1 回実装し、サーバーが作成可能なコンポーネントに関する情報を提供します。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」エントリの値を返します。この値が設定されていない場合は空文字列が返され、QWidget を含むすべてのスーパークラスの関数とプロパティが公開されます。
クラス自体の関数とプロパティのみを公開するには、この関数を再実装して `key` を返すようにしてください。
[pure virtual] QStringList QAxFactory::featureList() const
この関数を再実装し、このファクトリがサポートするウィジェット(クラス名)のリストを返すようにしてください。
[virtual] bool QAxFactory::hasStockEvents(const QString &key) const
ActiveX コントロール「key 」が標準の ActiveX イベントをサポートすべきである場合に true を返すよう、この関数を再実装してください。
- Click
- DblClick
- KeyDown
- KeyPress
- KeyUp
- マウスダウン
- MouseUp
- MouseMove
デフォルトの実装では、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)
type を使用して COM サーバーを起動します。成功した場合は true を返し、失敗した場合は false を返します。
サーバーがすでに実行中の場合(またはインプロセスサーバーの場合)、この関数を呼び出しても何も行われず、true を返します。
サーバーの実行ファイルが-activex コマンドライン引数で起動されている場合、type がMultipleInstances に設定されていれば、サーバーは自動的に起動されます。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(該当する場合)を宣言する必要があります。すべての宣言は、ID「IDTypeLib 」を持つタイプライブラリに含まれ、サーバーが実行可能サーバーである場合は、アプリケーションID「IDApp 」が割り当てられます。
このマクロは、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 )をエクスポートすることができます。すべての宣言は、IDLibID を持つタイプライブラリに含まれます。また、サーバーが実行可能サーバーである場合は、アプリケーションIDAppID が割り当てられます。
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()も参照してください 。
© 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.