COM¿¡ »ç¿ëÇÒ SafeArray¸¦ »ý¼ºÇÕ´Ï´Ù.
ArrayObj := ComObjArray(VarType, Count1 [, Count2, ... Count8])
°¡´ÉÇÑ °ªÀÇ ¸ñ·ÏÀº ComObjType¸¦ ÂüÁ¶ÇϽʽÿÀ.
°¢ Â÷¿øÀÇ Å©±â. ¹è¿Àº 8 Â÷¿ø±îÁö Áö¿øµË´Ï´Ù.
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]