# Function Reference

# Call

Calls a user-defined or built-in function contained in first parameter.

Call ( "function" [, param_1 [, param_2 [, param_N]]] )

## Parameters

function | The name of function to call as a literal string.
param | Arguments to be passed to the function being invoked - see Remarks below.

## Return Value

Success: | the return value of the called function. Both @error and @extended may contain values if the called function set them.
Failure: | sets the @error flag to 0xDEAD and @extended to 0xBEEF if the function does not exist or invalid number of parameters.

## Remarks

Arguments can be passed to functions individually or by placing them in an array. This array, which must be the only parameter used, should have its [0] element set to "CallArgArray" while elements [1 - N] hold the separate arguments to the function. See example for a demonstration.
Note that either Call() or the called function can set the @error flag. If Call() sets the @error flag, the value will be 0xDEAD and @extended will also be set to 0xBEEF. See the example for a demonstration of testing for a function that was not found.

## Related

Execute

## Example

    #include <MsgBoxConstants.au3>

    Example()

    Func Example()
        ; This calls a function accepting no arguments.
        Call("Test1")

        ; This calls a function accepting one argument and passes it an argument.
        Call("Test2", "Message from Call()!")

        ; This demonstrates how to use the special array argument.
        Local $aArgs[4]
        $aArgs[0] = "CallArgArray" ; This is required, otherwise, Call() will not recognize the array as containing arguments
        $aArgs[1] = "This is a string" ; Parameter one is a string
        $aArgs[2] = 47 ; Parameter two is a number
        Local $aArray[2]
        $aArray[0] = "Array Element 0"
        $aArray[1] = "Array Element 1"
        $aArgs[3] = $aArray ; Parameter three is an array

        ; We've built the special array, now call the function
        Call("Test3", $aArgs)

        ; Test calling a function that does not exist.  This shows the proper way to test by
        ; checking that both @error and @extended contain the documented failure values.
        Local Const $sFunction = "DoesNotExist"
        Call($sFunction)
        If @error = 0xDEAD And @extended = 0xBEEF Then MsgBox($MB_SYSTEMMODAL, "", "Function does not exist.")
    EndFunc   ;==>Example

    Func Test1()
        MsgBox($MB_SYSTEMMODAL, "", "Hello")
    EndFunc   ;==>Test1

    Func Test2($sMsg)
        MsgBox($MB_SYSTEMMODAL, "", $sMsg)
    EndFunc   ;==>Test2

    Func Test3($sString, $nNumber, $aArray)
        MsgBox($MB_SYSTEMMODAL, "", "The string is: " & @CRLF & $sString)
        MsgBox($MB_SYSTEMMODAL, "", "The number is: " & @CRLF & $nNumber)
        For $i = 0 To UBound($aArray) - 1
            MsgBox($MB_SYSTEMMODAL, "", "Array[" & $i & "] contains:" & @CRLF & $aArray[$i])
        Next
    EndFunc   ;==>Test3