ComObjType

COM オブジェクトから型情報を取得します。

Info := ComObjType(ComObj , InfoType)

パラメータ

ComObj

型:オブジェクト

COMオブジェクトまたは型付き値を含むラッパーオブジェクト。詳しくはComValueをご覧ください。

InfoType

型:文字列

If omitted, an integer variant type code indicating the type of value contained by the COM wrapper object will be retrieved. Otherwise, specify one of the following strings indicating the type information to retrieve:

Name:オブジェクトのデフォルトインターフェイスの名前。

IID:オブジェクトのデフォルトインターフェースのグローバル一意識別子(GUID)です。

Class:オブジェクトのクラス名。Prog IDとは異なることに注意してください(Prog IDはシステムレジストリでクラスを識別するために使用する名前、またはComObjectのための名前です)。

CLSID:オブジェクトのクラスのグローバル一意識別子(GUID)です。クラスは、CLSIDによってHKCRCLSIDレジストリキーの下に登録されることが多い。

戻り値

型:整数または文字列

戻り値は、InfoTypeの値に依存します。いずれかのパラメータが無効な場合、または要求された型情報を取得できなかった場合は、空文字列が返されます。

バリアント型定数

COMは、基本的なデータ型を識別するために、以下の値を使用します:

VT_EMPTY     :=      0  ; 値なし
VT_NULL      :=      1  ; SQL-style Null
VT_I2        :=      2  ; 16ビット符号付き整数
VT_I4        :=      3  ; 32ビット符号付き整数
VT_R4        :=      4  ; 32ビット浮動小数点数
VT_R8        :=      5  ; 64ビット浮動小数点数
VT_CY        :=      6  ; 通貨
VT_DATE      :=      7  ; 日付
VT_BSTR      :=      8  ; COM 文字列(Unicode 文字列に長さの接頭辞を付けたもの)。
VT_DISPATCH  :=      9  ; COM オブジェクト
VT_ERROR     :=    0xA  ; エラーコード(32ビット整数)
VT_BOOL      :=    0xB  ; 真(-1)または偽(0)の論理型。
VT_VARIANT   :=    0xC  ; VARIANT(VT_ARRAYまたはVT_BYREFとの組み合わせが必要)
VT_UNKNOWN   :=    0xD  ; IUnknown インターフェースポインタ
VT_DECIMAL   :=    0xE  ; (サポートされていません)
VT_I1        :=   0x10  ; 8ビット符号付き整数
VT_UI1       :=   0x11  ; 8ビット符号無し整数
VT_UI2       :=   0x12  ; 16ビット符号無し整数
VT_UI4       :=   0x13  ; 32ビット符号無し整数
VT_I8        :=   0x14  ; 64ビット符号付き整数
VT_UI8       :=   0x15  ; 64ビット符号無し整数
VT_INT       :=   0x16  ; 符号付きマシン整数
VT_UINT      :=   0x17  ; 符号なしマシン整数
VT_RECORD    :=   0x24  ; ユーザー定義型 -- NOT SUPPORTED
VT_ARRAY     := 0x2000  ; SAFEARRAY
VT_BYREF     := 0x4000  ; 別のタイプの値へのポインタ
/*
 VT_ARRAYとVT_BYREFを別の値と結合する(ビット単位のOR使用)
 で、正確な型を指定します。例えば、0x2003は、SAFEARRAYを識別します。
 は 32 ビット符号付き整数、0x400C はVARIANTへのポインタを示します。
*/

総論

ほとんどの場合、COMオブジェクトのメソッドまたはプロパティからの戻り値は、AutoHotkeyがサポートする適切なデータ型に変換されます。特に扱われていない型は、VariantChangeTypeによって文字列に強制されます。もしこれが失敗したり、Variant型にVT_ARRAYやVT_BYREFフラグが含まれている場合、代わりに値とその型の両方を含むオブジェクトが返されます。

任意の変数xに対して、ComObjType(x)が整数を返す場合、xはCOMオブジェクトラッパーを含む。

InfoType"Name"または"IID"の場合、IDispatch::GetTypeInfoインタフェースメソッドにより型情報を取得します。ComObjのバリアントタイプはVT_DISPATCHでなければならない。

InfoType"Class"または"CLSID"の場合、型情報はIProvideClassInfo::GetClassInfoインタフェースメソッドにより取得されます。ComObjのバリアントタイプはVT_DISPATCHまたはVT_UNKNOWNでなければならず、オブジェクトはIProvideClassInfoインターフェースを実装しなければならない(実装していないオブジェクトもある)。

ComObjValueComValueComObjectComObjGetComObjActive

COMオブジェクトの各種型情報を報告します。

d := ComObject("Scripting.Dictionary")
MsgBox
(
    "Variant type:`t" ComObjType(d) "
    Interface name:`t" ComObjType(d, "Name") "
    Interface ID:`t" ComObjType(d, "IID") "
    Class name:`t" ComObjType(d, "Class") "
    Class ID (CLSID):`t" ComObjType(d, "CLSID")
)