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]