OLE·Î µî·ÏµÇ¾î ½ÇÇà ÁßÀÎ °´Ã¼¸¦ ¿¶÷ÇÕ´Ï´Ù.
ComObject := ComObjActive(CLSID)
¸Å°³º¯¼ö³ª ¹Ýȯ °ª¿¡ °Ç³Ú À¯Çü ÀÖ´Â °ªÀ» ³ªÅ¸³»´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
ParamObj := ComObject(VarType, Value [, Flags])
¾Æ·¡¿¡ º¸¿©ÁÖ´Â »ç¿ë¹ýÀº ÃßõÇÏÁö ¾Ê½À´Ï´Ù. ¾ÕÀ¸·Î´Â »ç¿ëÀÌ ºÒ°¡´ÉÇϰųª ¹Ù²ð ¼ö ÀÖ½À´Ï´Ù.
COM °´Ã¼ÀÇ ¸Þ½îµå¸¦ È£ÃâÇÒ ¶§ ¼±ÅÃÀûÀÎ ¸Å°³º¯¼öÀÇ ±âº» °ª ´ë½Å¿¡ »ç¿ëÇÒ °´Ã¼¸¦ ¸¸µì´Ï´Ù. v1.1.12ºÎÅÍ Æó±âµÇ¾ú½À´Ï´Ù: ´ë½Å¿¡ ±×³É µÎ °³ÀÇ ½°Ç¥¸¦ ¿¬¼ÓÀûÀ¸·Î »ç¿ëÇϽʽÿÀ. ´ÙÀ½°ú °°ÀÌ: Obj.Method(1,,3)
ParamObj := ComObjMissing()
IDispatch Æ÷ÀÎÅ͸¦ °´Ã¼¿¡ ½Î ³Ö°í ÀÚµ¿À¸·Î AddRef¸¦ È£ÃâÇÕ´Ï´Ù.
ComObject := ComObjEnwrap(DispPtr) DispPtr := ComObjUnwrap(ComObject)
¹Ì·¡¸¦ º¸ÀåÇÏ´Â Äڵ带 ÀÛ¼ºÇÏ·Á¸é, ´ë½Å ´ÙÀ½°ú °°ÀÌ »ç¿ëÇϽʽÿÀ:
ComObject := ComObject(9, DispPtr, 1), ObjAddRef(DispPtr) DispPtr := ComObjValue(ComObject), ObjAddRef(DispPtr)
CLSID ¶Ç´Â »ç¶÷ÀÌ-ÀÐÀ» ¼ö ÀÖ´Â COM °´Ã¼ÀÇ Prog ID.
°´Ã¼ ±¸¹®¿¡ »ç¿ë°¡´ÉÇÑ COM °´Ã¼.
°ªÀÇ À¯ÇüÀ» ³ªÅ¸³»´Â Á¤¼ö. À¯Çü ¸ñ·ÏÀº ComObjType()À» ÂüÁ¶ÇϽʽÿÀ.
Æ÷ÀåÇÒ °ª. ÇöÀç ¿ÀÁ÷ Á¤¼ö¿Í Æ÷ÀÎÅÍ °ª¸¸ Áö¿øÇÕ´Ï´Ù.
ÀÌ ÇÔ¼öÀÇ ÇàÀ§¿Í Æ÷Àå °´Ã¼ÀÇ ÇàÀ§¿¡ ¿µÇâÀ» ÁÖ´Â Ç÷¡±×; ¾Æ·¡ ÂüÁ¶.
³¯ IDispatch Æ÷ÀÎÅÍ.
0 |
±âº» ÇàÀ§. AddRef´Â IUnknown°ú IDispatch Æ÷ÀÎÅÍ¿¡ ´ëÇÏ¿© ÀÚµ¿À¸·Î È£ÃâµË´Ï´Ù. ±×·¡¼ È£ÃâÀÚ´Â ObjRelease¸¦ »ç¿ëÇÏ¿© ÀûÀýÇÏ°Ô Æ÷ÀÎÅÍ »çº»À» ³õ¾Æ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ±âº» ÇàÀ§´Â ¾ÕÀ¸·Î ¹Ù²ð ¼ö ÀÖÀ¸¹Ç·Î, ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ Æ÷ÀåÇÒ ¶§ ¾ðÁ¦³ª Flags¸¦ |
1 | IUnknown, IDispatch ¶Ç´Â SAFEARRAY Æ÷ÀÎÅÍÀÇ ¼ÒÀ¯±ÇÀ» ȹµæÇÕ´Ï´Ù. AddRef´Â È£ÃâµÇÁö ¾Ê½À´Ï´Ù. Æ÷Àå °´Ã¼¿¡ SAFEARRAY°¡ µé¾î ÀÖÀ¸¸é (VT_BYREF´Â Á¦¿Ü), Æ÷Àå °´Ã¼°¡ ÇØÁ¦µÉ ¶§ SafeArrayDestroy°¡ ÀÚµ¿À¸·Î È£ÃâµË´Ï´Ù. |
Æ÷Àå °´Ã¼ÀÇ VarType¿¡ VT_BYREF (0x4000) Ç÷¡±×°¡ µé¾î ÀÖÀ¸¸é, ºó °¢°ýÈ£[]
¸¦ »ç¿ëÇÏ¿© ÂüÁ¶µÈ °ªÀ» Àаųª ¾µ ¼ö ÀÖ½À´Ï´Ù.
ÂüÁ¶¸¦ »ý¼ºÇÒ ¶§, Value´Â ¹Ýµå½Ã ÁÖ¾îÁø À¯ÇüÀÇ °ªÀ» ÀúÀåÇϱ⿡ ÃæºÐÇÑ °¡¿ë ´É·ÂÀÌ ÀÖ´Â º¯¼ö³ª ¹öÆÛÀÇ ¸Þ¸ð¸® ÁÖ¼ÒÀ̾î¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½À» »ç¿ëÇϸé VBScript ÇÔ¼ö°¡ ¾µ ¼ö ÀÖ´Â º¯¼ö¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù:
VarSetCapacity(var, 24, 0) vref := ComObject(0x400C, &var) ; 0x400C´Â VT_BYREF¿Í VT_VARIANTÀÇ Á¶ÇÕÀÔ´Ï´Ù. vref[] := "in value" sc.Run("Example", vref) ; sc´Â ¹Ýµå½Ã ¾Æ·¡ÀÇ ¿¹Á¦¿Í °°ÀÌ ÃʱâȵǾî¾ß ÇÕ´Ï´Ù. MsgBox % vref[]
ÇöÀç ¹öÀü¿¡¼, "ComObj"·Î ½ÃÀÛÇÏ´Â ÇÔ¼ö°¡ ´Ù¸¥ COM ÇÔ¼ö Áß Çϳª¿Í ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ½ÇÁ¦·Î´Â ComObjActive¸¦ È£ÃâÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ComObjEnwrap(DispPtr)
¿Í ComObjActive(DispPtr)
´Â ¸ðµÎ ComObject(DispPtr)
¿Í µ¿µîÇÕ´Ï´Ù (¹¬½ÃÀûÀ¸·Î VarTypeÀº 9ÀÔ´Ï´Ù). ±×·¸Áö¸¸, ÀÌ ÇàÀ§´Â ¾ÕÀ¸·Î »ç¿ëÇÏÁö ¸øÇÒ °ÍÀÔ´Ï´Ù. ±×·¡¼ ÀÌ ÆäÀÌÁö¿¡¼ º¸¿©ÁÖ´Â ¹Ù¿Í °°ÀÌ ComObject()
¿Í ComObjActive()
¸¸ »ç¿ëÇÏ´Â °ÍÀÌ Á¦ÀÏ ÁÁ½À´Ï´Ù.
IDispatch³ª IUnknown ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ Æ÷ÀåÇϰųª ¿¶÷ÇÏ´Â µ¥ ÀÌ ÇÔ¼ö°¡ »ç¿ëµÉ ¶§, ±âº» ÇàÀ§´Â COM °´Ã¼ÀÇ ÂüÁ¶ Ƚ¼ö¸¦ ´Ã¸®´Â °ÍÀÔ´Ï´Ù. ±×·¯¹Ç·Î, ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅÍ´Â ´õ ÀÌ»ó ÇÊ¿äÇÏÁö ¾ÊÀ» ¶§ ¼öµ¿À¸·Î ÇØÁ¦ÇØ¾ß ÇÕ´Ï´Ù. Æ÷Àå °´Ã¼°¡ ÇØÁ¦µÉ ¶§, ±× ¾È¿¡ µç ÂüÁ¶´Â ÀÚµ¿À¸·Î ÇØÁ¦µË´Ï´Ù.
¾Ë·ÁÁø ÇÑ°è: COM °´Ã¼°¡ Æ÷ÀåµÉ ¶§¸¶´Ù, »õ Æ÷Àå °´Ã¼°¡ »ý¼ºµË´Ï´Ù. obj1 == obj2
±×¸®°í array[obj1] := value
¿Í °°Àº ºñ±³¿Í ÇÒ´çÀº °°Àº COM °´Ã¼¸¦ Æ÷ÇÔÇÏ°í ÀÖÀ» Áö¶óµµ µÎ °³ÀÇ Æ÷Àå °´Ã¼¸¦ À¯ÀÏÇÑ °ÍÀ¸·Î Ãë±ÞÇÕ´Ï´Ù.
ComObjCreate, ComObjGet, ComObjConnect, ComObjError, ComObjFlags, ObjAddRef/ObjRelease, ComObjQuery, GetActiveObject (MSDN)
ComObjUnwrap: ´ÙÀ½ ÂüÁ¶ ComObjConnect.
; ¿©´Â ¸»- ScriptControlÀº 32-ºñÆ® ¹öÀüÀÇ ¿ÀÅäÇÖÅ°¸¦ ¿ä±¸ÇÕ´Ï´Ù. code = ( Sub Example(Var) MsgBox Var Var = "out value!" End Sub ) sc := ComObjCreate("ScriptControl"), sc.Language := "VBScript", sc.AddCode(code) ; ¿¹Á¦: VARIANT ByRef¸¦ COM ÇÔ¼ö¿¡ °Ç³Ü´Ï´Ù. var := ComVar() var[] := "in value" sc.Run("Example", var.ref) MsgBox % var[] ; ComVar: °ªÀ» ByRef·Î °Ç³×´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù. ; ComVar[] °ªÀ» ¿¶÷ÇÕ´Ï´Ù ; ComVar[] := ValÀº °ªÀ» ¼³Á¤ÇÕ´Ï´Ù ; ComVar.ref´Â COM ÇÔ¼ö¿¡ °Ç³×±â À§ÇØ ByRef °´Ã¼¸¦ ¿¶÷ÇÕ´Ï´Ù. ComVar(Type=0xC) { static base := { __Get: "ComVarGet", __Set: "ComVarSet", __Delete: "ComVarDel" } ; 1 VARIANTÀÇ ¹è¿À» ¸¸µì´Ï´Ù. ÀÌ ¹æ¹ýÀ¸·Î ¸ðµç ³»Àå ÄÚµå´Â ; VARIANT¿Í AutoHotkey ³»ºÎ À¯Çü »çÀÌÀÇ ¸ðµç º¯È¯À» ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. arr := ComObjArray(Type, 1) ; ±× ¹è¿À» Àá±×°í VARIANT¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ¿¶÷ÇÕ´Ï´Ù. DllCall("oleaut32\SafeArrayAccessData", "ptr", ComObjValue(arr), "ptr*", arr_data) ; ±× ¹è¿À» ÀúÀåÇÕ´Ï´Ù. ±×¸®°í VARIANT ByRef¸¦ °Ç³×´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â °´Ã¼¸¦ ÀúÁ¤ÇÕ´Ï´Ù. return { ref: ComObject(0x4000|Type, arr_data), _: arr, base: base } } ComVarGet(cv, p*) { ; ½ºÅ©¸³Æ®°¡ ¹ÌÁöÀÇ Çʵ忡 Á¢±ÙÇϸé È£ÃâµË´Ï´Ù. if p.MaxIndex() = "" ; À̸§/¸Å°³º¯¼ö ¾øÀ½. Áï, cv[] return cv._[0] } ComVarSet(cv, v, p*) { ; ½ºÅ©¸³Æ®°¡ ¹ÌÁöÀÇ Çʵ带 ¼³Á¤ÇÒ ¶§ È£ÃâµË´Ï´Ù. if p.MaxIndex() = "" ; À̸§/¸Å°³º¯¼ö ¾øÀ½. Áï, cv[]:=v return cv._[0] := v } ComVarDel(cv) { ; °´Ã¼°¡ ÇØÁ¦µÉ ¶§ È£ÃâµË´Ï´Ù. ; ÀÌ°ÍÀÌ ¼º°øÇØ¾ß ³»ºÎ ¹è¿ÀÌ ÇØÁ¦µÉ ¼ö ÀÖ½À´Ï´Ù. DllCall("oleaut32\SafeArrayUnaccessData", "ptr", ComObjValue(cv._)) }