QAxBase Class
QAxBase クラスは、COM オブジェクトの初期化およびアクセスを行うための API を提供する抽象クラスです。詳細...
| ヘッダー: | #include <qaxbase.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS AxContainer) target_link_libraries(mytarget PRIVATE Qt6::AxContainer) |
| qmake: | QT += axcontainer |
| 継承元: |
パブリック型
パブリック関数
| virtual | ~QAxBase() |
| QVariant | asVariant() const |
| ulong | classContext() const |
| void | clear() |
| QString | control() const |
| void | disableClassInfo() |
| void | disableEventSink() |
| void | disableMetaObject() |
| QVariant | dynamicCall(const char *function, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant()) |
| QVariant | dynamicCall(const char *function, QList<QVariant> &vars) |
| QString | generateDocumentation() |
| bool | isNull() const |
| QAxBase::PropertyBag | propertyBag() const |
| virtual bool | propertyWritable(const char *prop) const |
| long | queryInterface(const QUuid &uuid, void **iface) const |
| QAxObject * | querySubObject(const char *name, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant()) |
| QAxObject * | querySubObject(const char *name, QList<QVariant> &vars) |
| void | setClassContext(ulong classContext) |
| void | setPropertyBag(const QAxBase::PropertyBag &bag) |
| virtual void | setPropertyWritable(const char *prop, bool ok) |
| QStringList | verbs() const |
保護された関数
| QAxBase() | |
| virtual bool | initialize(IUnknown **ptr) |
| bool | initializeActive(IUnknown **ptr) |
| bool | initializeFromFile(IUnknown **ptr) |
| bool | initializeLicensed(IUnknown **ptr) |
| bool | initializeRemote(IUnknown **ptr) |
詳細な説明
QAxBase は、直接使用することはできない抽象クラスであり、サブクラスであるQAxObject およびQAxWidget を通じてインスタンス化されます。このクラスは、IUnknown 実装を通じて COM オブジェクトに直接アクセスするための API を提供します。COM オブジェクトが IDispatch インターフェースを実装している場合、そのオブジェクトのプロパティおよびメソッドは、Qt のプロパティおよびスロットとして利用可能になります。
connect(buttonBack, SIGNAL(clicked()), webBrowser, SLOT(GoBack()));オブジェクトの IDispatch 実装によって公開されるプロパティは、Qt オブジェクトモデルが提供するプロパティシステムを通じて読み書きできます(両方のサブクラスはQObjectであるため、QObject::setProperty() およびQObject::property() を使用できます)。複数のパラメータを持つプロパティはサポートされていません。
activeX->setProperty("text", "some text");
int value = activeX->property("value");オブジェクトの IDispatch 実装によって公開されるプロパティの書き込み関数やその他のメソッドは、dynamicCall() を使用して直接呼び出すことも、シグナルに接続されたスロットとして間接的に呼び出すこともできます。
webBrowser->dynamicCall("GoHome()");COM オブジェクトがサポートする発信イベントは、標準の Qt シグナルとして発火されます。
QAxBase は、COM データ型とそれに対応する Qt データ型との間で透過的に変換を行います。一部の COM 型には、対応する Qt データ構造体が存在しません。
サポートされている COM データ型は、次の表の 1 列目に記載されています。 2 列目は、QObject プロパティ関数で使用できる Qt 型です。3 列目は、生成されたシグナルおよびスロットのプロトタイプで入力パラメータとして使用される Qt 型であり、最後の列は、シグナルおよびスロットのプロトタイプで出力パラメータとして使用される Qt 型です。
| COM 型 | Qt プロパティ | 入力パラメータ | 出力パラメータ |
|---|---|---|---|
| VARIANT_BOOL | bool | bool | bool& |
| BSTR | QString | constQString& | QString& |
| char、short、int、long | int | int | int& |
| uchar、ushort、uint、ulong | uint | uint | uint& |
| float、double | double | double | double& |
| DATE | QDateTime | constQDateTime& | QDateTime& |
| CY | qlonglong | qlonglong | qlonglong& |
| OLE_COLOR | QColor | constQColor& | QColor& |
| SAFEARRAY(VARIANT) | QList<QVariant> | constQList<QVariant>& | QList<QVariant>& |
| SAFEARRAY(int)、SAFEARRAY(double)、SAFEARRAY(Date) | QList<QVariant> | constQList<QVariant>& | QList<QVariant>& |
| SAFEARRAY(BYTE) | QByteArray | constQByteArray& | QByteArray& |
| SAFEARRAY(BSTR) | QStringList | constQStringList& | QStringList& |
| VARIANT | 型に依存 | constQVariant& | QVariant& |
| IFontDisp* | QFont | constQFont& | QFont& |
| IPictureDisp* | QPixmap | constQPixmap& | QPixmap& |
| IDispatch* | QAxObject* | QAxBase::asVariant() | QAxObject* (戻り値) |
| IUnknown* | QAxObject* | QAxBase::asVariant() | QAxObject* (戻り値) |
| SCODE、DECIMAL | 未対応 | 未対応 | 未対応 |
| VARIANT* (Qt 4.5 以降) | 未対応 | QVariant& | QVariant& |
列挙型や、サポートされている型への typedef もサポートされています。
以下の IDL で記述された COM インターフェースのメソッドを呼び出すには
dispinterface IControl
{
properties:
[id(1)] BSTR text;
[id(2)] IFontDisp *font;
methods:
[id(6)] void showColumn([in] int i);
[id(3)] bool addColumn([in] BSTR t);
[id(4)] int fillList([in, out] SAFEARRAY(VARIANT) *list);
[id(5)] IDispatch *item([in] int i);
};次のように QAxBase API を使用します:
QAxObject object("<CLSID>");
QString text = object.property("text").toString();
object.setProperty("font", QFont("Times New Roman", 12));
connect(this, SIGNAL(clicked(int)), &object, SLOT(showColumn(int)));
bool ok = object.dynamicCall("addColumn(const QString&)", "Column 1").toBool();
QList<QVariant> varlist;
QList<QVariant> parameters;
parameters << QVariant(varlist);
int n = object.dynamicCall("fillList(QList<QVariant>&)", parameters).toInt();
QAxObject *item = object.querySubItem("item(int)", 5);なお、オブジェクトが設定すべきQList は、QVariantのパラメータリストの要素として指定する必要があります。
サポートされていないデータ型のプロパティにアクセスしたり、パラメータを渡したりする必要がある場合は、IDispatch の実装または他のインターフェースを通じて、COMオブジェクトに直接アクセスする必要があります。これらのインターフェースは、queryInterface() を通じて取得できます。
IUnknown *iface = 0;
activeX->queryInterface(IID_IUnknown, (void**)&iface);
if (iface) {
// use the interface
iface->Release();
}COM インターフェースの定義を取得するには、使用するコンポーネントに付属のヘッダーファイルを使用する必要があります。一部のコンパイラでは、#import コンパイラ指令を使用してタイプライブラリをインポートすることもできます。どのタイプライブラリをインポートする必要があるか、およびそれらの使用方法については、コンポーネントのドキュメントを参照してください。
サポートされていないデータ型のパラメータが渡されるイベントに対応する必要がある場合は、COM イベントによって提供されるイベントデータを渡す汎用シグナルを使用できます。
QAxObject 、QAxWidget 、QAxScript 、およびActiveQt Frameworkも参照してください 。
メンバ関数のドキュメント
[protected] QAxBase::QAxBase()
QAxBase オブジェクトを作成します。
[virtual noexcept] QAxBase::~QAxBase()
COMオブジェクトをシャットダウンし、QAxBase オブジェクトを破棄します。
「clear()」も参照してください 。
QVariant QAxBase::asVariant() const
COM オブジェクトをラップする `QVariant ` を返します。このバリアントは、例えば `dynamicCall()` などの関数の引数として使用できます。
ulong QAxBase::classContext() const
ActiveX コントロールが実行されるコンテキストを返します(デフォルトは CLSCTX_SERVER)。
setClassContext()も参照してください 。
void QAxBase::clear()
COMオブジェクトの接続を解除し、破棄します。
この関数を再実装する場合は、clear() を呼び出すためにデストラクタも再実装し、clear() 関数の最後にこの実装を呼び出す必要があります。
QString QAxBase::control() const
ActiveX コントロールを返します。
void QAxBase::disableClassInfo()
この ActiveX コンテナのクラス情報の生成を無効にします。ActiveX コントロールに関するクラス情報が不要な場合は、この関数を使用してメタオブジェクトの生成を高速化してください。
なお、この関数はオブジェクトの生成直後に呼び出す必要があります。
void QAxBase::disableEventSink()
この ActiveX コンテナのイベントシンクの実装を無効にします。ActiveX コントロールのイベントをリッスンする予定がない場合は、この関数を使用してメタオブジェクトの生成を高速化してください。
一部の ActiveX コントロールは、イベントシンクに接続されていると不安定になる場合があります。OLE イベントを取得するには、標準の COM メソッドを使用して独自のイベントシンクを登録する必要があります。queryInterface() を使用して、生の COM オブジェクトにアクセスしてください。
なお、この関数はオブジェクトの生成直後に呼び出す必要があります。
void QAxBase::disableMetaObject()
この ActiveX コンテナのメタオブジェクト生成を無効にします。これにより、イベントシンクおよびクラス情報の生成も無効になります。Qt のメタオブジェクト実装を使用する予定がない場合は、この関数を呼び出すことで、コントロールのインスタンス化を高速化できます。dynamicCall() を通じてオブジェクトを呼び出すことは引き続き可能ですが、QObject のAPIではシグナル、スロット、プロパティは利用できなくなります。
一部のActiveXコントロールは、OLEオートメーションと併用すると不安定になる場合があります。そのようなコントロールを使用する場合は、queryInterface()が提供するCOMインターフェースを通じて、標準のCOMメソッドを使用してください。
なお、この関数はオブジェクトの生成直後に呼び出す必要があります。
QVariant QAxBase::dynamicCall(const char *function, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())
COMオブジェクトのメソッド `function` を呼び出し、パラメータ `var1`、`var1`、`var2`、`var3`、`var4`、`var5`、`var6`、`var7 `、および `var8` を渡します。そして、そのメソッドから返された値を返します。ただし、メソッドが値を返さない場合や関数呼び出しが失敗した場合は、無効な `QVariant ` を返します。
function がオブジェクトのメソッドである場合、文字列は完全なプロトタイプとして指定する必要があります。たとえば、QObject::connect()の呼び出しで記述されるような形式です。
activeX->dynamicCall("Navigate(const QString&)", "www.qt-project.org");あるいは、文字列に埋め込まれたパラメータを渡して関数を呼び出すこともできます。例えば、上記の関数は次のようにして呼び出すこともできます。
activeX->dynamicCall("Navigate(\"www.qt-project.org\")");すべてのパラメータは文字列として渡されます。それらが正しく解釈されるかどうかは制御対象に依存し、型指定されたパラメータを持つプロトタイプを使用する場合よりも処理速度が遅くなります。
function がプロパティである場合、文字列はそのプロパティ名でなければなりません。var1 が有効なQVariant である場合はプロパティのセッターが呼び出され、そうでない場合はゲッターが呼び出されます。
activeX->dynamicCall("Value", 5);
QString text = activeX->dynamicCall("Text").toString();なお、QObject::property() およびQObject::setProperty() を使用してプロパティを取得・設定する方が高速であることに注意してください。
dynamicCall() を使用すると、disabled metaobject ラッパーを介してオブジェクトを呼び出すこともでき、特にオートメーション処理中に異なる型の多くのオブジェクトを呼び出す場合、パフォーマンスを大幅に向上させることができます。ただし、その場合、ActiveQt はパラメータの検証を行いません。
dynamicCall() を通じて呼び出せるのは、QVariant でサポートされているデータ型のパラメータまたは戻り値を持つ関数に限られます。サポートされているデータ型とサポートされていないデータ型のリストについては、QAxBase クラスのドキュメントを参照してください。 パラメータリストにサポートされていないデータ型を含む関数を呼び出したい場合は、queryInterface() を使用して適切な COM インターフェースを取得し、その関数を直接使用してください。
IWebBrowser2 *webBrowser = 0;
activeX->queryInterface(IID_IWebBrowser2, (void **)&webBrowser);
if (webBrowser) {
webBrowser->Navigate2(pvarURL);
webBrowser->Release();
}この方法の方が効率も高くなります。
QVariant QAxBase::dynamicCall(const char *function, QList<QVariant> &vars)
COMオブジェクトのメソッドfunction を呼び出し、vars 内のパラメータを渡して、そのメソッドが返す値を返します。メソッドが値を返さない場合、または関数呼び出しが失敗した場合は、この関数は無効なQVariant オブジェクトを返します。
メソッドにアウトパラメータがある場合、vars 内のQVariant オブジェクトは更新されます。
これはオーバーロードされた関数です。
QString QAxBase::generateDocumentation()
ラップされた COM オブジェクトに関するドキュメントを含むリッチテキスト文字列を返します。この文字列を HTML ファイルに出力したり、QTextBrowser ウィジェットなどで利用したりできます。
[virtual protected] bool QAxBase::initialize(IUnknown **ptr)
この仮想関数は setControl() によって呼び出され、要求された COM オブジェクトを作成します。ptr には、そのオブジェクトの IUnknown 実装が設定されます。オブジェクトの初期化に成功した場合は true を返し、失敗した場合は false を返します。
デフォルトの実装では、control() によって返された文字列を解析し、その文字列がそれぞれのパターンに一致する場合、initializeRemote()、initializeLicensed()、またはinitializeActive() を呼び出します。control() が既存のファイル名である場合は、initializeFromFile() が呼び出されます。どのパターンにも一致しない場合、またはリモート初期化やライセンス付き初期化に失敗した場合は、CoCreateInstance を直接使用してオブジェクトを作成します。
サポートされているパターンの詳細については、QAxBaseWidget::control プロパティのドキュメントを参照してください。
ptr で返されるインターフェースは、この関数が戻る時点で正確に 1 回だけ参照されている必要があります。CoCreateInstance などによって提供されるインターフェースはすでに参照されているため、再度参照する必要はありません。
[protected] bool QAxBase::initializeActive(IUnknown **ptr)
現在のマシン上で実行中のアクティブなインスタンスに接続し、ptr 内の実行中のオブジェクトに対するIUnknownインターフェースを返します。この関数は、成功した場合はtrueを返し、そうでない場合はfalseを返します。
この関数は、コントロール文字列に部分文字列「}&」が含まれている場合、initialize() によって呼び出されます。
initialize()も参照してください 。
[protected] bool QAxBase::initializeFromFile(IUnknown **ptr)
control プロパティで指定されたファイル名を扱う COM オブジェクトを作成し、ptr でそのオブジェクトの IUnknown インターフェースを返します。この関数は、成功した場合は true を返し、それ以外の場合は false を返します。
この関数は、コントロールの文字列が既存のファイル名である場合、initialize() によって呼び出されます。
initialize()も参照してください 。
[protected] bool QAxBase::initializeLicensed(IUnknown **ptr)
ライセンス付きコントロールのインスタンスを作成し、ptr 内のオブジェクトに対するIUnknownインターフェースを返します。この関数は、成功した場合はtrueを返し、そうでない場合はfalseを返します。
この関数は、コントロール文字列に部分文字列「}:」が含まれている場合、initialize() によって呼び出されます。ライセンスキーはこの部分文字列の直後に続く必要があります。
initialize()も参照してください 。
[protected] bool QAxBase::initializeRemote(IUnknown **ptr)
リモートサーバー上にインスタンスを作成し、ptr 内のオブジェクトのIUnknownインターフェースを返します。この関数は、成功した場合はtrueを返し、それ以外の場合はfalseを返します。
この関数は、制御文字列に部分文字列「/{」が含まれている場合、initialize() によって呼び出されます。リモートマシンに関する情報は、この部分文字列の前に指定する必要があります。
initialize()も参照してください 。
bool QAxBase::isNull() const
このラッパーによって読み込まれている COM オブジェクトがない場合は true を返し、それ以外の場合は false を返します。
control()も参照してください 。
QAxBase::PropertyBag QAxBase::propertyBag() const
COM オブジェクトによって公開されているすべてのプロパティの「名前:値」マップを返します。
COM オブジェクトがプロパティバッグをサポートしている場合、これは複数のプロパティを個別に取得するよりも効率的です。
警告: COM オブジェクトのプロパティバッグの実装がすべてのプロパティを返すこと、あるいは返されるプロパティが IDispatch インターフェースを通じて利用可能なプロパティと同じであることは保証されません 。
setPropertyBag()も参照してください 。
[virtual] bool QAxBase::propertyWritable(const char *prop) const
プロパティ `prop ` が書き込み可能であれば `true` を返し、そうでない場合は `false` を返します。デフォルトでは、すべてのプロパティは書き込み可能です。
警告: コントロールの実装によっては 、一部のプロパティについてこの設定が無視される場合があります。
関連項目: setPropertyWritable()、QAxBaseWidget::propertyChanged()、QAxBaseObject::propertyChanged()も参照してください 。
long QAxBase::queryInterface(const QUuid &uuid, void **iface) const
COM オブジェクトに対してインターフェイス `uuid ` を要求し、`iface ` の値を指定されたインターフェイスに設定します。要求されたインターフェイスが提供できなかった場合は、0 に設定します。
COM オブジェクトの QueryInterface 実装の結果を返します。
control()も参照してください 。
QAxObject *QAxBase::querySubObject(const char *name, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())
メソッドまたはプロパティname によって提供されたCOMオブジェクトをラップするQAxObject へのポインタを返し、パラメータvar1 、var1 、var2 、var3 、var4 、var5 、var6 、var7 、およびvar8 を渡します。
name がメソッドによって提供される場合、その文字列には完全な関数プロトタイプを含める必要があります。
name がプロパティである場合、文字列はプロパティ名でなければならず、var1 、...、var8 は無視されます。
返される `QAxObject ` は、このオブジェクト(型は `QAxObject ` または `QAxWidget` のいずれか)の子であり、このオブジェクトが削除されると削除されます。ただし、返されたオブジェクトを自分で削除しても安全であり、サブオブジェクトのリストを反復処理する際にはそうすべきです。
COM 対応アプリケーションでは通常、アプリケーションの特定の要素をディスパッチインターフェースとして公開するオブジェクトモデルが用意されています。このメソッドを使用して、オブジェクトモデルの階層をナビゲートします。例えば、
QAxWidget outlook("Outlook.Application");
QAxObject *session = outlook.querySubObject("Session");
if (session) {
QAxObject *defFolder = session->querySubObject(
"GetDefaultFolder(OlDefaultFolders)",
"olFolderContacts");
//...
}QAxObject *QAxBase::querySubObject(const char *name, QList<QVariant> &vars)
vars 内の `QVariant ` オブジェクトは、メソッドにアウトパラメータがある場合に更新されます。
これはオーバーロードされた関数です。
void QAxBase::setClassContext(ulong classContext)
ActiveX コントロールが実行されるコンテキストを次のように設定しますclassContext
CoCreateInstance を呼び出す際の「dwClsContext」引数に影響します。これは、両方の起動方式をサポートしているコントロールにおいて、インプロセス起動とアウトオブプロセス起動を切り替えるために使用できます。 また、CLSCTX_ENABLE_CLOAKING およびなりすましトークンと組み合わせて使用することで、コントロールのアクセス許可を変更または制限することもできます。
なお、この関数が効果を発揮するには、setControl() の前に呼び出す必要があります。
classContext()も参照してください 。
void QAxBase::setPropertyBag(const QAxBase::PropertyBag &bag)
COM オブジェクトのプロパティを、bag の対応する値に設定します。
警告: `propertyBag ` 関数によって返されたプロパティバッグのみを設定してください 。COM オブジェクトのプロパティバッグの実装が、IDispatch インターフェイスを通じて利用可能なのと同じプロパティをサポートしているとは保証できないためです。
「propertyBag()」も参照してください 。
[virtual] void QAxBase::setPropertyWritable(const char *prop, bool ok)
ok がtrueの場合、prop プロパティを書き込み可能に設定します。そうでない場合は、prop を読み取り専用に設定します。デフォルトでは、すべてのプロパティは書き込み可能です。
警告: コントロールの実装によっては 、一部のプロパティに対してこの設定が無視される場合があります。
関連項目: propertyWritable()、QAxBaseWidget::propertyChanged()、QAxBaseObject::propertyChanged()も参照してください 。
QStringList QAxBase::verbs() const
COM オブジェクトが実行可能な動詞のリストを返します。オブジェクトが IOleObject を実装していない場合、または動詞を一切サポートしていない場合、この関数は空の文字列リストを返します。
なお、OLE のデフォルトの動詞 (OLEIVERB_SHOW など) はこのリストには含まれません。
© 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.