Dynamically calls a function at a specific memory address.
DllCallAddress ( "return type", address [, type1, param1 [, type n, param n]] )
| return type | The return type of the function (see below). |
| address | The address of a function. If this value is invalid your script will crash! |
| 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). |
| Type | Details |
| 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. |
| WINDOWS API Type | AutoIt Type |
| LPCSTR/LPSTR | STR |
| LPCWSTR/LPWSTR | WSTR |
| LPVOID | PTR |
| LPxyz | xyz* |
| HINSTANCE | HANDLE |
| HRESULT | LONG |
| LONGLONG/LARGE_INTEGER | INT64 |
| ULONGLONG/ULARGE_INTEGER | UINT64 |
| SIZE_T | ULONG_PTR |
| 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 |
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
DllCall, DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllClose, DllOpen, DllStructCreate, DllStructGetPtr
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WinAPISysWin.au3>
#include <WindowsNotifsConstants.au3>
Example()
Func Example()
; Enable GUI event mode.
Opt("GUIOnEventMode", 1)
; Create a simple GUI.
Local $hWnd = GUICreate("DllCallAddress Example")
; Register the close event handler.
GUISetOnEvent($GUI_EVENT_CLOSE, "OnClose")
; Show the GUI.
GUISetState(@SW_SHOWNORMAL, $hWnd)
; Get a pointer to the window's WindowProc().
Local $pWndProc = _WinAPI_GetWindowLong($hWnd, $GWL_WNDPROC)
; Tell the user what is about to happen.
MsgBox($MB_SYSTEMMODAL, "DllCallAddress Example Msg", "When you press OK the test window will close.")
; Explicitly generate a WM_CLOSE event and pass it directly to the WindowProc().
; This should never be done in a real application (Use _SendMessage() instead) but
; it demonstrates how to use the function.
DllCallAddress("LRESULT", $pWndProc, "HWND", $hWnd, "UINT", $WM_CLOSE, "WPARAM", 0, "LPARAM", 0)
EndFunc ;==>Example
Func OnClose()
GUIDelete(@GUI_WinHandle)
MsgBox($MB_SYSTEMMODAL, "DllCallAddress Example Msg", "Close event received, the test window should now be closed.")
EndFunc ;==>OnClose