###Function###
DllCallAddress

###Description###
Dynamically calls a function at a specific memory address.
<div class="specialnote">Special Note: This is an advanced function.  Incorrect use of this function may cause AutoIt to crash. Before using this function make sure <a href="DllCall.htm">DllCall()</a> doesn't do what you need.</div>

###Syntax###
DllCallAddress ( "return type", address [, type1, param1 [, type n, param n]] )


###Parameters###
@@ParamTable@@
return type
	The return type of the function (see below).
address
	The address of a function.  <strong>If this value is invalid your script will crash!</strong>
type1
	[optional] The type of the parameter (see remarks).
param1
	[optional] The actual parameter (see remarks).
type n
	[optional] The type of the nth parameter (see remarks).
param n
	[optional] The actual nth parameter (see remarks).
@@End@@

<br />Valid Types are:

@@ParamTable@@
<strong>Type</strong>
	<strong>Details</strong>
NONE
	no value (only valid for return type - equivalent to void in C)
BYTE
	an unsigned 8 bit integer
BOOLEAN
	an unsigned 8 bit integer
SHORT
	a 16 bit integer
USHORT
	an unsigned 16 bit integer
WORD
	an unsigned 16 bit integer
INT
	a 32 bit integer
LONG
	a 32 bit integer
BOOL
	a 32 bit integer
UINT
	an unsigned 32 bit integer
ULONG
	an unsigned 32 bit integer
DWORD
	an unsigned 32 bit integer
INT64
	a 64 bit integer
UINT64
	an unsigned 64 bit integer
PTR
	a general pointer (void *)
HWND
	a window handle (pointer)
HANDLE
	an handle (pointer)
FLOAT
	a single precision floating point number
DOUBLE
	a double precision floating point number
INT_PTR, LONG_PTR, LRESULT, LPARAM
	an integer big enough to hold a pointer when running on x86 or x64 versions of AutoIt.
UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM
	an unsigned integer big enough to hold a pointer when running on x86 or x64 versions of AutoIt.
STR
	an ANSI string (a minimum of 65536 chars is allocated).
WSTR
	a UNICODE wide character string (a minimum of 65536 chars is allocated).
STRUCT
	structure created with DllStructCreate()
*
	Add * to the end of another type to pass it by reference.  For example "int*" passes a pointer to an "int" type.
@@End@@


<br />Conversions from Windows API types to AutoIt types:

@@ParamTable@@
<strong>WINDOWS API Type</strong>
	<strong>AutoIt Type</strong>
LPCSTR/LPSTR
	STR
LPCWSTR/LPWSTR
	WSTR
LPVOID
	PTR
LP<em>xyz</em>
	<em>xyz</em>*
HINSTANCE
	HANDLE
HRESULT
	LONG
LONGLONG/LARGE_INTEGER
	INT64
ULONGLONG/ULARGE_INTEGER
	UINT64
SIZE_T
	ULONG_PTR
@@End@@

To use nested structures inside a structure you must re-define the nested structure.  For example, a structure containing 2 POINT structures ("long;long") would be declared as "long;long;long;long".  The first two long values correspond to the first POINT structure and the second two values correspond to the second POINT structure.

For more Windows API types see <a href="http://msdn.microsoft.com/en-us/library/aa383751.aspx">MSDN</a>.

###ReturnValue###
@@ReturnTable@@
Success:	an array. See remarks.
Failure:	sets the @error flag to non-zero.
@error:	2 = unknown "return type",
	4 = bad number of parameters,
	5 = bad parameter
@@End@@
See remarks.


###Remarks###
By default, AutoIt uses the 'stdcall' calling method. To use the 'cdecl' method place ':cdecl' after the return type.

If the function call fails then the @error flag is set to non-zero.
Otherwise an array is returned that contains the function return value and a copy of all the parameters (including parameters that the function may have modified when passed by reference).
$return[0] = function return value
$return[1] = param1
$return[2] = param2
...
$return[n] = paramn


###Related###
DllCall, DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllClose, DllOpen, DllStructCreate, DllStructGetPtr


###Example###
@@IncludeExample@@
