ComObjArray() [v1.0.91+]
COM에 사용할 SafeArray를 생성합니다.
ArrayObj := ComObjArray(VarType, Count1 [, Count2, ... Count8])
매개변수
- VarType
-
배열의 기본 유형 (배열의 각 원소의 VARTYPE). VARTYPE은 variant 유형의 부분집합으로 제한됩니다. VT_ARRAY도 VT_BYREF 플래그도 설정할 수 없습니다. VT_EMPTY와 VT_NULL은 배열에 대하여 유효한 기본 유형이 아닙니다. 다른 모든 유형은 적법합니다.
가능한 값의 목록은 ComObjType를 참조하십시오.
- CountN
각 차원의 크기. 배열은 8 차원까지 지원됩니다.
- ArrayObj
SafeArray를 담고 있는 포장 객체.
메쏘드
배열 포장 객체는 다음 메쏘드를 지원합니다:
Array.MaxIndex(n)
: n번째 차원의 상한 값을 돌려줍니다. n이 생략되면 기본값은 1입니다.
Array.MinIndex(n)
: n번째 차원이 하한 값을 돌려줍니다. n이 생략되면, 기본값은 1입니다.
Array.Clone()
[v1.0.96.00+]: 배열의 사본을 돌려줍니다.
Array._NewEnum()
[v1.0.96.00+]: 보통 스크립트가 호출하지 않습니다; for-회돌이를 SafeArrays에 사용할 수 있습니다.
총평
COM 메쏘드와 ComObjActive는 어떠한 포장 객체도 돌려줄 수 있으며 스크립트는 값이 배열인지 다음과 같이 알아낼 수 있습니다:
if ComObjType(obj) & 0x2000 MsgBox % "Array subtype: " . ComObjType(obj) & 0xfff else MsgBox Not an array.
최대 8 차원까지 지원됩니다.
[v1.0.96.00+]: 안전배열(SafeArrays)는 다중 참조를 지원하도록 설계되어 있지 않기 때문에, 한 안전배열이 또다른 안전배열의 원소로 할당될 때, 사본이 따로 생성됩니다. 그렇지만, 이런 일은 그 포장 객체에 F_OWNVALUE 플래그가 있을 경우에만 일어납니다. 이 플래그는 그 배열을 파괴할 책임이 있다는 뜻을 나타냅니다. ComObjFlags를 사용하면 이 플래그를 제거할 수 있습니다.
[v1.1.17.00+]: COM 클라이언트에 의하여 호출되는 함수나 메쏘드가 F_OWNVALUE를 가진 안전배열을 돌려주면, 대신에 사본이 생성되고 반환됩니다. 원래의 SafeArray는 자동으로 파괴됩니다.
관련 항목
ComObjType, ComObjValue, ComObjActive, ComObjFlags, 배열 조작 함수 (MSDN)
예제
; 예제 #1: 간단한 사용법. arr := ComObjArray(VT_VARIANT:=12, 3) arr[0] := "Auto" arr[1] := "Hot" arr[2] := "key" Loop % arr.MaxIndex() + 1 t .= arr[A_Index-1] MsgBox % t
; 예제 #2: 다 차원. arr := ComObjArray(VT_VARIANT:=12, 3, 4) ; 차원의 개수를 얻습니다: dim := DllCall("oleaut32\SafeArrayGetDim", "ptr", ComObjValue(arr)) ; 각 차원의 상한값과 하한값을 얻습니다: Loop %dim% dims .= arr.MinIndex(A_Index) " .. " arr.MaxIndex(A_Index) "`n" MsgBox %dims% ; 간단한 사용법: Loop 3 { x := A_Index-1 Loop 4 { y := A_Index-1 arr[x, y] := x * y } } MsgBox % arr[2, 3]