ComObjType

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

Info := ComObjType(ComObj , InfoType)

パラメータ

ComObj

型:Object

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: The name of the object's default interface.

IID: The globally unique identifier (GUID) of the object's default interface.

Class: The object's class name. Note that this is not the same as a Prog ID (a Prog ID is a name used to identify the class in the system registry, or for ComObject).

CLSID: The globally unique identifier (GUID) of the object's class. Classes are often registered by CLSID under the HKCR\CLSID registry key.

戻り値

型:整数または文字列

The return value depends on the value of 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オブジェクトラッパーを含む。

If InfoType is "Name" or "IID", type information is retrieved via the IDispatch::GetTypeInfo interface method. ComObjのバリアントタイプはVT_DISPATCHでなければならない。

If InfoType is "Class" or "CLSID", type information is retrieved via the IProvideClassInfo::GetClassInfo interface method. ComObjのバリアントタイプはVT_DISPATCHまたはVT_UNKNOWNでなければならず、オブジェクトはIProvideClassInfoインターフェースを実装しなければならない(実装していないオブジェクトもある)。

ComObjValue, ComValue, ComObject, ComObjGet, ComObjActive

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")
)