</head> <body> <h1>ComObjArray() <span class="ver">[v1.0.91+]</span></h1> <p>COM에 사용할 SafeArray를 생성합니다.</p> <pre class="Syntax">ArrayObj := <span class="func">ComObjArray</span>(VarType, Count1 <span class="optional">, Count2, ... Count8</span>)</pre> <h2 id="Parameters">매개변수</h2> <dl> <dt>VarType</dt> <dd>배열의 기본 유형 (배열의 각 원소의 VARTYPE). VARTYPE은 variant 유형의 부분집합으로 제한됩니다. VT_ARRAY도 VT_BYREF 플래그도 설정할 수 없습니다. VT_EMPTY와 VT_NULL은 배열에 대하여 유효한 기본 유형이 아닙니다. 다른 모든 유형은 적법합니다. <p>가능한 값의 목록은 <a href="ComObjType.htm">ComObjType</a>를 참조하십시오.</p></dd> <dt>Count<i>N</i></dt> <dd><p>각 차원의 크기. 배열은 8 차원까지 지원됩니다.</p></dd> </dl> <h2 id="Return_Value">반환 값</h2> <p>This function returns a wrapper object containing a new SafeArray.</p> <h2 id="Methods">메쏘드</h2> <p>배열 포장 객체는 다음 메쏘드를 지원합니다:</p> <p><code class="Syntax">Array.MaxIndex(n)</code>: <i>n</i>번째 차원의 상한 값을 돌려줍니다. <i>n</i>이 생략되면 기본값은 1입니다.</p> <p><code class="Syntax">Array.MinIndex(n)</code>: <i>n</i>번째 차원이 하한 값을 돌려줍니다. <i>n</i>이 생략되면 기본값은 1입니다.</p> <p><code class="Syntax">Array.Clone()</code> <span class="ver">[v1.0.96.00+]</span>: 배열의 사본을 돌려줍니다.</p> <p><code class="Syntax">Array._NewEnum()</code> <span class="ver">[v1.0.96.00+]</span>: 보통 스크립트가 호출하지 않습니다; <a href="For.htm">for-회돌이</a>를 SafeArrays에 사용할 수 있습니다.</p> <h2 id="General_Remarks">총평</h2> <p>COM 메쏘드와 <a href="ComObjActive.htm">ComObjActive()</a>는 어떠한 포장 객체도 돌려줄 수 있으며 스크립트는 값이 배열인지 다음과 같이 알아낼 수 있습니다:</p> <pre>if ComObjType(<i>obj</i>) &amp; 0x2000 MsgBox % "Array subtype: " . ComObjType(obj) &amp; 0xfff else MsgBox Not an array.</pre> <p>최대 8 차원까지 지원됩니다.</p> <p><span class="ver">[v1.0.96.00+]:</span> 안전배열(SafeArrays)는 다중 참조를 지원하도록 설계되어 있지 않기 때문에, 한 안전배열이 또다른 안전배열의 원소로 할당될 때, 사본이 따로 생성됩니다. 그렇지만, 이런 일은 그 포장 객체에 F_OWNVALUE 플래그가 있을 경우에만 일어납니다. 이 플래그는 그 배열을 파괴할 책임이 있다는 뜻을 나타냅니다. <a href="ComObjFlags.htm">ComObjFlags()</a>를 사용하면 이 플래그를 제거할 수 있습니다.</p> <p><span class="ver">[v1.1.17.00+]:</span> COM 클라이언트에 의하여 호출되는 함수나 메쏘드가 F_OWNVALUE를 가진 안전배열을 돌려주면, 대신에 사본이 생성되고 반환됩니다. 원래의 SafeArray는 자동으로 파괴됩니다.</p> <h2 id="Related">관련 항목</h2> <p><a href="ComObjType.htm">ComObjType()</a>, <a href="ComObjValue.htm">ComObjValue()</a>, <a href="ComObjActive.htm">ComObjActive()</a>, <a href="ComObjFlags.htm">ComObjFlags()</a>, <a href="http://msdn.microsoft.com/ko-kr/library/ms221145.aspx">배열 조작 함수 (MSDN)</a></p> <h2 id="Examples">예제</h2> <div class="ex" id="ExBasic"> <p><a class="ex_number" href="#ExBasic"></a> 간단한 사용법.</p> <pre id="Ex1">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 </pre> </div> <div class="ex" id="ExMultiDims"> <p><a class="ex_number" href="#ExMultiDims"></a> 다 차원.</p> <pre id="Ex2">arr := ComObjArray(VT_VARIANT:=12, 3, 4) <em>; 차원의 개수를 얻습니다:</em> dim := DllCall("oleaut32\SafeArrayGetDim", "ptr", ComObjValue(arr)) <em>; 각 차원의 상한값과 하한값을 얻습니다:</em> Loop %dim% dims .= arr.MinIndex(A_Index) " .. " arr.MaxIndex(A_Index) "`n" MsgBox %dims% <em>; 간단한 사용법:</em> Loop 3 { x := A_Index-1 Loop 4 { y := A_Index-1 arr[x, y] := x * y } } MsgBox % arr[2, 3] </pre> </div> </body> </html>