ComObjType() [AHK_L 53+]

유형 정보를 COM 객체로부터 열람합니다.

VarType := ComObjType(ComObject)           ; [v1.0.91+] 필요
IName   := ComObjType(ComObject, "Name")
IID     := ComObjType(ComObject, "IID")
CName   := ComObjType(ComObject, "Class")  ; [v1.1.26+] 필요
CLSID   := ComObjType(ComObject, "CLSID")  ; [v1.1.26+] 필요

매개변수

ComObject

COM 객체 또는 유형 있는 값을 담고 있는 포장 객체.

Param2

The second parameter is a string indicating the type information to retrieve.

반환 값

The return value depends on the value of Param2:

Param2반환 값
생략[v1.0.91+]: An integer variant type code indicating the type of value contained by the COM wrapper object.
"Name"The name of the object's default interface.
"IID"The globally unique identifier (GUID) of the object's default interface.
"Class"[v1.1.26+]: 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 ComObjCreate).
"CLSID"[v1.1.26+]: The globally unique identifier (GUID) of the object's class. Classes are often registered by CLSID under the HKCR\CLSID registry key.

An empty string is returned if either parameter is invalid or if the requested type information could not be retrieved.

Variant 유형의 상수들

VT_EMPTY     :=      0  ; 값 없음
VT_NULL      :=      1  ; SQL-스타일의 널
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 문자열 (고정 길이의 유니코드 문자열)
VT_DISPATCH  :=      9  ; COM 객체
VT_ERROR     :=    0xA  ; 에러 코드 (32-비트 정수)
VT_BOOL      :=    0xB  ; 불리언 True (-1) 또는 False (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  ; 사용자-정의 유형 -- 지원하지 않음
VT_ARRAY     := 0x2000  ; SAFEARRAY
VT_BYREF     := 0x4000  ; 또다른 유형의 값을 가리키는 포인터
/*
 VT_ARRAY와 VT_BYREF는 또다른 값과 조합하여 (비트별 OR을 사용) 정확한 유형을 지정합니다.
 예를 들면, 0x2003는 32-비트 유부호 정수로 구성된 SAFEARRAY로
 식별되고 0x400C는  VARIANT를 가리키는 포인터로 식별됩니다.
*/

총평

대부분의 경우, COM 객체의 메쏘드나 특성으로부터 반환된 값은 오토핫키가 지원하는 적절한 데이터 유형으로 변환됩니다. 구체적으로 처리가 되지 않는 유형은 VariantChangeType를 통하여 강제로 문자열로 변환됩니다; 이것이 실패하거나 variant 유형에 VT_ARRAY 또는 VT_BYREF 플래그가 들어 있다면, 대신에 값과 그의 유형을 모두 담고 있는 객체가 반환됩니다.

모든 변수 x에 대하여, 만약 ComObjType(x)가 정수를 돌려주면, x에는 COM 객체 포장자가 들어 있습니다.

If Param2 is "Name" or "IID", type information is retrieved via the IDispatch::GetTypeInfo interface method. ComObject's variant type must be VT_DISPATCH.

If Param2 is "Class" or "CLSID", type information is retrieved via the IProvideClassInfo::GetClassInfo interface method. ComObject's variant type must be VT_DISPATCH or VT_UNKNOWN, and the object must implement the IProvideClassInfo interface (some objects do not).

ComObjValue(), ComObjCreate(), ComObjGet(), ComObjActive()

예제

Reports various type information of a COM object.

d := ComObjCreate("Scripting.Dictionary")
VarType := ComObjType(d)
IName   := ComObjType(d, "Name")
IID     := ComObjType(d, "IID")
CName   := ComObjType(d, "Class")  ; [v1.1.26+] 필요
CLSID   := ComObjType(d, "CLSID")  ; [v1.1.26+] 필요
MsgBox % "Variant type:`t" VarType
	. "`nInterface name:`t" IName "`nInterface ID:`t" IID
	. "`nClass name:`t" CName "`nClass ID (CLSID):`t" CLSID