QAxBase Class

QAxBase クラスは、COM オブジェクトを初期化しアクセスするための API を提供する抽象クラスです。詳細...

Header: #include <QAxBase>
CMake: find_package(Qt6 REQUIRED COMPONENTS AxContainer)
target_link_libraries(mytarget PRIVATE Qt6::AxContainer)
qmake: QT += axcontainer
Inherited By:

QAxObject and QAxWidget

パブリック関数

virtual ~QAxBase()
int asVariant() const
int classContext() const
void clear()
int control() const
void disableClassInfo()
void disableEventSink()
void disableMetaObject()
int dynamicCall(const char *function, const int &var1 = QVariant(), const int &var2 = QVariant(), const int &var3 = QVariant(), const int &var4 = QVariant(), const int &var5 = QVariant(), const int &var6 = QVariant(), const int &var7 = QVariant(), const int &var8 = QVariant())
int dynamicCall(const char *function, int &vars)
int generateDocumentation()
bool isNull() const
int propertyBag() const
virtual bool propertyWritable(const char *prop) const
long queryInterface(const QUuid &uuid, void **iface) const
QAxObject *querySubObject(const char *name, const int &var1 = QVariant(), const int &var2 = QVariant(), const int &var3 = QVariant(), const int &var4 = QVariant(), const int &var5 = QVariant(), const int &var6 = QVariant(), const int &var7 = QVariant(), const int &var8 = QVariant())
QAxObject *querySubObject(const char *name, int &vars)
void setClassContext(int classContext)
void setPropertyBag(const int &bag)
virtual void setPropertyWritable(const char *prop, bool ok)
int 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 Object Model によって提供されるプロパティシステムを通して読み書きすることができます(どちらのサブクラスもQObjects ですので、QObject::setProperty() とQObject::property() を使用することができます)。複数のパラメータを持つプロパティはサポートされていません。

activeX->setProperty("text", "some text");
int value = activeX->property("value");

オブジェクトの IDispatch 実装によって公開されるプロパティやその他のメソッドの書き込み関数は、dynamicCall() を使用して直接呼び出すか、シグナルに接続されたスロットとして間接的に呼び出すことができます。

webBrowser->dynamicCall("GoHome()");

COM オブジェクトがサポートする発信イベントは、標準 Qt シグナルとして発信されます。

connect(webBrowser, SIGNAL(TitleChanged(QString)),
        this, SLOT(setCaption(QString)));

QAxBase は、COM データ型と同等の Qt データ型を透過的に変換します。COM データ型の中には、Qt のデータ構造に相当するものがないものもあります。

サポートされている COM データ型は、以下の表の最初の列に記載されています。第 2 列目は、QObject プロパティ関数で使用できる Qt データ型です。3番目の列は、生成されたシグナルとインパラメータ用スロットのプロトタイプで使用されるQtデータ型で、最後の列は、シグナルとアウトパラメータ用スロットのプロトタイプで使用されるQtデータ型です。

COMタイプQtプロパティインパラメータアウトパラメータ
VARIANT_BOOLブールブールブール
BSTRQStringconstQString&QString&
char, short, int, longintintint&
uchar、ushort、uint、ulonguintuintuint&
float、doubledoubledoubledouble&
日付QDateTimeconstQDateTime&QDateTime&
CYクロロングクロロングqlonglong&
OLE_COLORQColorconstQColor&QColor&
safearray(バリアント)QList<QVariantconstQList<QVariant>& セーフ配列(variant)QList<QVariant>アンド
SAFEARRAY(int)、SAFEARRAY(double)、SAFEARRAY(Date)QList<QVariant>.constQList<QVariant>& SAFEARRAY(int), SAFEARRAY(double), SAFEARRAY(date)QList<QVariant>&
セーフアレイ(バイト)QByteArrayconstQByteArray&QByteArray&
セーフアレイ(bstr)QStringListconstQStringList&QStringList&
バリアント型依存constQVariant&QVariant&
IFontDisp*QFontconstQFont&QFont&
IPictureDisp* (画像QPixmapconstQPixmap&QPixmap&
IDispatch*。QAxObject*QAxBase::asVariant()QAxObject* (戻り値)
IUnknown*QAxObject*QAxBase::asVariant()QAxObject* (戻り値)
SCODE、DECIMAL未対応未対応未サポート
VARIANT* (Qt 4.5 以降)未サポートQVariant&QVariant

サポートされているのは、列挙と、サポートされている型への typedef です。

以下の IDL で記述された COM インターフェイスのメソッドを呼び出すには、QAxBase API を使用します。

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()も参照してください

int QAxBase::asVariant() const

COM オブジェクトをラップしたQVariant を返します。このバリアントは、dynamicCall() などのパラメータとして使用できます。

int QAxBase::classContext() const

ActiveX コントロールが実行されるコンテキストを返します (デフォルトは CLSCTX_SERVER)。

setClassContext()も参照してください

void QAxBase::clear()

COM オブジェクトを切断して破棄します。

この関数を再実装する場合は、clear() を呼び出すデストラクタも再実装し、clear() 関数の最後でこの実装を呼び出す必要があります。

int QAxBase::control() const

ActiveX コントロールを返します。

void QAxBase::disableClassInfo()

この ActiveX コンテナのクラス情報生成を無効にします。ActiveXコントロールのクラス情報が不要な場合は、この関数を使用してメタ・オブジェクトの生成を高速化します。

この関数は、オブジェクトの構築直後に呼び出す必要があることに注意してください。

void QAxBase::disableEventSink()

このActiveXコンテナのイベント・シンク実装を無効にします。ActiveXコントロールのイベントをリッスンするつもりがない場合は、 この関数を使用してメタ・オブジェクトの生成を高速化します。

ActiveXコントロールの中には、イベント・シンクに接続すると不安定になるものがあります。OLEイベントを取得するには、標準COMメソッドを使用して独自のイベント・シンクを登録する必要があります。生の COM オブジェクトにアクセスするには、queryInterface() を使用します。

この関数は、オブジェクトの構築直後に呼び出す必要があることに注意してください。

void QAxBase::disableMetaObject()

このActiveXコンテナのメタ・オブジェクト生成を無効にします。これは、イベント・シンクとクラス情報の生成も無効にします。Qt メタオブジェクトの実装を使用しない場合は、この関数を呼び出してコントロールのインスタンス化を高速化します。dynamicCall() からオブジェクトを呼び出すことはできますが、シグナル、スロット、プロパティはQObject API で利用できなくなります。

ActiveX コントロールの中には、OLE オートメーションで使用すると不安定になるものがあります。queryInterface() が提供する COM インタフェースを通じてこれらのコントロールを使用するには、標準の COM メソッドを使用してください。

この関数は、オブジェクトの構築直後に呼び出す必要があることに注意してください。

int QAxBase::dynamicCall(const char *function, const int &var1 = QVariant(), const int &var2 = QVariant(), const int &var3 = QVariant(), const int &var4 = QVariant(), const int &var5 = QVariant(), const int &var6 = QVariant(), const int &var7 = QVariant(), const int &var8 = QVariant())

COM オブジェクトのメソッドfunction を呼び出し、パラメータvar1var1var2var3var4var5var6var7var8 を渡し、メソッドによって返された値、またはメソッドが値を返さない場合や関数呼び出しに失敗した場合は無効な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();
}

この方が効率的です。

int QAxBase::dynamicCall(const char *function, int &vars)

これはオーバーロードされた関数です。

COM オブジェクトのメソッドfunction を呼び出し、vars でパラメータを渡し、メソッドが返す値を返します。メソッドが値を返さない場合、または関数呼び出しに失敗した場合、この関数は無効なQVariant オブジェクトを返します。

メソッドがアウト・パラメータを持つ場合、varsQVariant オブジェクトが更新されます。

int 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 で返されるインターフェースは、この関数が返されるときに、正確に一度だけ参照されなければならない。CoCreateInstance などで提供されるインターフェイスはすでに参照されているので、再度参照する必要はありません。

[protected] bool QAxBase::initializeActive(IUnknown **ptr)

現在のマシン上で実行されているアクティブなインスタンスに接続し、ptr で実行中のオブジェクトへの IUnknown インタフェースを返します。この関数は、成功すれば真を返し、そうでなければ偽を返す。

この関数は、制御文字列に "}&" という部分文字列が含まれている場合に、initialize() から呼び出される。

initialize()も参照

[protected] bool QAxBase::initializeFromFile(IUnknown **ptr)

コントロール・プロパティのファイル名を扱う COM オブジェクトを作成し、そのオブジェクトへの IUnknown インタフェースをptr で返します。この関数は、成功すれば真を返し、そうでなければ偽を返す。

この関数は、コントロール文字列が既存のファイル名である場合にinitialize() から呼び出される。

initialize()も参照

[protected] bool QAxBase::initializeLicensed(IUnknown **ptr)

ライセンス制御のインスタンスを作成し、そのオブジェクトへの IUnknown インタフェースをptr に返す。この関数は、成功した場合は true を返し、失敗した場合は false を返します。

この関数は、コントロールの文字列に "}:" という部分文字列が含まれている場合にinitialize() から呼び出されます。ライセンス・キーは、この部分文字列の後に続く必要があります。

initialize()も参照してください

[protected] bool QAxBase::initializeRemote(IUnknown **ptr)

リモート・サーバー上にインスタンスを作成し、ptr のオブジェクトへの IUnknown インタフェースを返します。この関数は、成功した場合は true を返し、失敗した場合は false を返します。

この関数は、制御文字列に"/{"という部分文字列が含まれている場合に、initialize()から呼び出される。リモート・マシンに関する情報は、部分文字列の前に記述する必要がある。

initialize()も参照

bool QAxBase::isNull() const

このラッパーによってロードされたCOMオブジェクトがない場合はtrueを返し、そうでない場合はfalseを返します。

control()も参照して ください。

int 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 の値を設定します。

COM オブジェクトの QueryInterface 実装の結果を返します。

control()も参照

QAxObject *QAxBase::querySubObject(const char *name, const int &var1 = QVariant(), const int &var2 = QVariant(), const int &var3 = QVariant(), const int &var4 = QVariant(), const int &var5 = QVariant(), const int &var6 = QVariant(), const int &var7 = QVariant(), const int &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, int &vars)

これはオーバーロードされた関数です。

varsQVariant オブジェクトは、メソッドがアウトパラメータを持つときに更新されます。

void QAxBase::setClassContext(int classContext)

ActiveXコントロールが実行されるコンテキストを設定します。classContext

CoCreateInstance を呼び出すときの "dwClsContext" 引数に影響します。これは、in-procとout-of-procの両方をサポートするコントロールの起動を制御するために使用できます。また、CLSCTX_ENABLE_CLOAKINGとインパーソネーショントークンを使用する場合、コントロールのパーミッションを変更/削減するために使用できます。

この関数は、setControl() の前に呼び出されなければならないことに注意。

classContext()も参照

void QAxBase::setPropertyBag(const int &bag)

COM オブジェクトのプロパティをbag の対応する値に設定します。

警告: COM オブジェクトのプロパティ・バッグ実装が、IDispatch インタフェースを通じて利用可能な同じプロパティをサポートしていることは保証できないため、propertyBag 関数によって返されたプロパティ・バッグのみを設定する必要があります。

propertyBag()も参照

[virtual] void QAxBase::setPropertyWritable(const char *prop, bool ok)

ok が真の場合、prop プロパティを書き込み可能に設定し、そうでない場合、prop を読み取り専用に設定します。デフォルトでは、すべてのプロパティは書き込み可能です。

警告: コントロールの実装によっては、この設定が無視されるプロパティもあります。

propertyWritable()、QAxBaseWidget::propertyChanged()、および QAxBaseObject::propertyChanged()も参照してください

int QAxBase::verbs() const

COM オブジェクトが実行可能な動詞のリストを返します。オブジェクトが IOleObject を実装していないか、動詞をサポートしていない場合、この関数は空の文字列リストを返します。

OLE デフォルトの動詞(OLEIVERB_SHOW など)はリストに含まれないことに注意してください。

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