#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #pragma compile(AutoItExecuteAllowed, True) #AutoIt3Wrapper_Change2CUI=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include #include "./_ArrayEx.au3" Global $soh = "" Global $stx = "" Global $etx = "" Global $sFilename = @ScriptDir & "\plugin.au3" Global $vars = [["var1", 11], _ ["var2", 22], _ ["var3", 33], _ ["var4", 44]] Global $params = ["param1", "param2", "param3"] Global $calls = [["checkNumber", 123, "Hello from main"], _ ["checkNumber", 666, "Hello from main"], _ ["addValueOnVar", 0, "var2"], _ ["addValueOnVar", 0, "var3"], _ ["notAFunction", 0, ""]] For $i = 0 To UBound($calls, 1) - 1 ConsoleWrite("Calling : " & $calls[$i][0] & "(" & $calls[$i][1] & ", " & $calls[$i][2] & ")" & @CRLF) Local $ret = CallExternal($sFilename, $calls[$i][0], $calls[$i][1], $calls[$i][2], $vars, $params) If(@error) Then ConsoleWrite(@TAB & "Get an error : " & $ret & @CRLF) Else Switch $i Case 0 ConsoleWrite(@TAB & "value of 'number' setted : " & getValue("number") & @CRLF) Case 2, 3 ConsoleWrite(@TAB & "value of '" & $calls[$i][2] & "' updated : " & getValue($calls[$i][2]) & @CRLF) EndSwitch EndIf ConsoleWrite(@CRLF) Next Func CallExternal($sFilename, $funcName, $number, $text, $vars, $params) Local $read Local $readError Local $hPID = Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $sFilename & '" ' & $funcName, '', '', BitOR($STDIN_CHILD, $STDOUT_CHILD, $STDERR_CHILD)) sendParam($hPID, $number) sendParam($hPID, $text) sendParam($hPID, $vars) sendParam($hPID, $params) While ProcessExists($hPID) Sleep(250) $read &= StdoutRead($hPID) $readError &= StderrRead($hPID) WEnd If(StringLen($readError) > 0) Then Return SetError(1, 0, $readError) EndIf If(StringLen($read) > 0) Then Local $entries = _Array_Deserialize($read, $etx) _Array_Delete($entries, UBound($entries, 1)-1) For $i = 0 To UBound($entries, 1) - 1 Local $value = _Array_Deserialize($entries[$i], $soh, $stx) If(UBound($value, 0) == 1 And UBound($value, 1) == 2) Then addValue($value[0], $value[1]) EndIf Next EndIf EndFunc Func sendParam($hPid, $param) StdinWrite($hPID, _Array_Serialize($param, $soh, $stx) & $etx) EndFunc Func getValue($name) Local $indice = _Array_Find($vars, $name) If ($indice >= 0) Then Return $vars[$indice][1] EndIf Return SetError(1) EndFunc Func addValue($name, $value, $isNumber = False) Local $indice = _Array_Find($vars, $name) Local $newValue = _AsArray($name, $value) If ($indice >= 0) Then _Array_Set($vars, $newValue, $indice) Else _Array_Add($vars, $newValue) EndIf EndFunc