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 차원까지 지원됩니다.

반환 값

This function returns a wrapper object containing a new 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)

예제

간단한 사용법.

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

다 차원.

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]