ComObjType() [AHK_L 53+]

Ermittelt Informationen über den Typ eines COM-Objekts.

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

Parameter

ComObject

Ein Wrapper-Objekt, das ein COM-Objekt oder einen typisierten Wert enthält.

Param2

Der zweite Parameter ist eine Zeichenkette, die kennzeichnet, welche Typeninformation abgerufen werden soll.

Rückgabewert

Der Rückgabewert ist vom Param2-Wert abhängig:

Param2Rückgabewert
Fehlt[v1.0.91+]: Ein numerischer Variantentyp-Code, der den Typ des im COM-Wrapper-Objekt enthaltenen Wertes kennzeichnet.
"Name"Der Name des Standard-Interface des Objekts.
"IID"Der globale eindeutige Identifikator (GUID) des Standard-Interface des Objekts.
"Class"[v1.1.26+]: Der Klassenname des Objekts. Beachten Sie, dass dieser Klassenname nicht dasselbe ist wie eine ProgID (eine ProgID ist ein Name zum Identifizieren der Klasse in der System-Registry, oder für ComObjCreate).
"CLSID"[v1.1.26+]: Der globale eindeutige Identifikator (GUID) der Klasse des Objekts. Klassen sind oft via CLSID im HKCR\CLSID-Registry-Key registriert.

Es wird eine leere Zeichenkette zurückgegeben, wenn der Parameter ungültig ist oder wenn die angeforderte Typeninformation nicht abgerufen werden konnte.

Variantentyp-Konstanten

VT_EMPTY     =      0  ; Kein Wert
VT_NULL      =      1  ; Eine 0 im SQL-Stil
VT_I2        =      2  ; 16-Bit signed Int
VT_I4        =      3  ; 32-Bit signed Int
VT_R4        =      4  ; 32-Bit Floating-Point-Zahl
VT_R8        =      5  ; 64-Bit Floating-Point-Zahl
VT_CY        =      6  ; Währung
VT_DATE      =      7  ; Datum
VT_BSTR      =      8  ; COM-Zeichenkette (Unicode-Zeichenkette mit Längenpräfix)
VT_DISPATCH  =      9  ; COM-Objekt
VT_ERROR     =    0xA  ; Fehlercode (32-Bit Integer)
VT_BOOL      =    0xB  ; Boolesches True (-1) oder False (0)
VT_VARIANT   =    0xC  ; VARIANT (muss mit VT_ARRAY oder VT_BYREF kombiniert werden)
VT_UNKNOWN   =    0xD  ; IUnknown-Interface-Pointer
VT_DECIMAL   =    0xE  ; (nicht unterstützt)
VT_I1        =   0x10  ; 8-Bit signed Int
VT_UI1       =   0x11  ; 8-Bit unsigned Int
VT_UI2       =   0x12  ; 16-Bit unsigned Int
VT_UI4       =   0x13  ; 32-Bit unsigned Int
VT_I8        =   0x14  ; 64-Bit signed Int
VT_UI8       =   0x15  ; 64-Bit unsigned Int
VT_INT       =   0x16  ; Signed Maschinen-Int
VT_UINT      =   0x17  ; Unsigned Maschinen-Int
VT_RECORD    =   0x24  ; Benutzerdefinierter Typ -- NICHT UNTERSTÜTZT
VT_ARRAY     = 0x2000  ; SAFEARRAY
VT_BYREF     = 0x4000  ; Pointer, der auf einen anderen Wertetyp verweist
/*
 VT_ARRAY und VT_BYREF werden mit einem anderen Wert kombiniert (verwendet bitweises OR),
 um den exakten Typ anzugeben. Zum Beispiel ermittelt 0x2003 ein SAFEARRAY
 mit 32-Bit signed Integers und 0x400C einen Pointer, der auf einen VARIANT verweist.
*/

Allgemeine Bemerkungen

In den meisten Fällen werden Rückgabewerte, die von einer Methode oder Eigenschaft eines COM-Objekts stammen, in einen Datentyp umgewandelt, der für AutoHotkey geeignet ist. Unbehandelte Typen werden via VariantChangeType in Zeichenketten umgewandelt; Falls das fehlschlägt oder der Variantentyp den VT_ARRAY- oder VT_BYREF-Flag enthält, wird stattdessen ein Objekt zurückgegeben, das sowohl den Wert als auch dessen Typ enthält.

Wenn ComObjType(x) ein Integer zurückgibt, enthält x einen COM-Objekt-Wrapper.

Wenn Param2 "Name" oder "IID" ist, wird die Typeninformation via IDispatch::GetTypeInfo-Interfacemethode abgerufen. Der Variantentyp von ComObject muss VT_DISPATCH sein.

Wenn Param2 "Class" oder "CLSID" ist, wird die Typeninformation via IProvideClassInfo::GetClassInfo-Interfacemethode abgerufen. Der Variantentyp von ComObject muss VT_DISPATCH oder VT_UNKNOWN sein, und das Objekt muss das IProvideClassInfo-Interface implementieren (einige Objekte tun es nicht).

Siehe auch

ComObjValue, ComObjCreate, ComObjGet, ComObjActive

Beispiele

d := ComObjCreate("Scripting.Dictionary")
VarType := ComObjType(d)
IName   := ComObjType(d, "Name")
IID     := ComObjType(d, "IID")
CName   := ComObjType(d, "Class")  ; Benötigt [v1.1.26+]
CLSID   := ComObjType(d, "CLSID")  ; Benötigt [v1.1.26+]
MsgBox % "Variantentyp:`t" VarType
	. "`nInterfacename:`t" IName "`nInterface-ID:`t" IID
	. "`nKlassenname:`t" CName "`nKlassen-ID (CLSID):`t" CLSID