0% found this document useful (0 votes)
40 views

Function DllCall

The DllCall function dynamically calls a function in a DLL. It takes the DLL filename or handle, return type, function name, and optional parameters as arguments. It returns an array containing the return value and copied parameters. If the call fails, @error is set with an error code. DllCall provides access to Windows API functions by loading DLLs and calling functions within them.

Uploaded by

Fabian Toro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
40 views

Function DllCall

The DllCall function dynamically calls a function in a DLL. It takes the DLL filename or handle, return type, function name, and optional parameters as arguments. It returns an array containing the return value and copied parameters. If the call fails, @error is set with an error code. DllCall provides access to Windows API functions by loading DLLs and calling functions within them.

Uploaded by

Fabian Toro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

17/7/2020 Function DllCall

Function Reference

DllCall
Dynamically calls a function in a DLL.

DllCall ( "dll", "return type", "function" [, type1, param1 [, type n, param n]] )

Parameters
The filename of the DLL to use. e.g. "user32.dll". A handle obtained from DllOpen can also be used (See
dll
Remarks).

return type The return type of the function (see below).

function The name, eg. "MessageBox" or the ordinal value, e.g. 62, of the function in the DLL to call.

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).

Valid Types are:

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)


https://www.autoitscript.com/autoit3/docs/functions/DllCall.htm 1/4
17/7/2020 Function DllCall

FLOAT a single precision floating point number

DOUBLE a double precision floating point number


INT_PTR,
LONG_PTR,
an integer big enough to hold a pointer when running on x86 or x64 versions of AutoIt.
LRESULT,
LPARAM

UINT_PTR,
ULONG_PTR,
an unsigned integer big enough to hold a pointer when running on x86 or x64 versions of AutoIt.
DWORD_PTR,
WPARAM

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.

Conversions from Windows API types to AutoIt types:

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
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 MSDN.

Return Value
Success: an array. See remarks.
Failure: sets the @error flag to non-zero.
@error: 1 = unable to use the DLL file,
2 = unknown "return type",
3 = "function" not found in the DLL file,
4 = bad number of parameters,
5 = bad parameter.

https://www.autoitscript.com/autoit3/docs/functions/DllCall.htm 2/4
17/7/2020 Function DllCall

Remarks
If a dll filename is given then the DLL is automatically loaded and then closed at the end of the call. If you want to manually
control the loading and unloading of the DLL then you should use DllOpen() and DllClose() and use a handle instead of a
filename in this function.

By default, AutoIt uses the 'stdcall' calling method. To use the 'cdecl' method place ':cdecl' after the return type.
DllCall("SQLite.dll", "int:cdecl", "sqlite3_open", "str", $sDatabase_Filename , "long*", 0).

By default, AutoIt tries to use the ANSI version of a function name, i.e. MessageBoxA is attempted when MessageBox is given as
the function name. To call the unicode version use MessageBoxW.

If the function call fails then @error 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
DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllClose, DllOpen, DllStructCreate, DllStructGetPtr

Example
Example 1

; Calling the MessageBox API directly.


DllCall("user32.dll", "int", "MessageBox", _
"hwnd", 0, _ ; Handle to the parent window
"str", "Some text", _ ; The text of the message box
"str", "Some title", _ ; The title of the message box
"int", 0) ; Flags for the message box.

Example 2

#include <MsgBoxConstants.au3>

; Calling a function that modifies parameters,


Local $iPID = Run("notepad")

Local $hWnd = WinWait("[CLASS:Notepad]", "", 2000)

If $hWnd = 0 Then
; Timeout occured.
Exit MsgBox($MB_SYSTEMMODAL, Default, "Unable to start notepad!")
EndIf

Local $aResult = DllCall("user32.dll", "int", "GetWindowText", "hwnd", $hWnd, "str", "", "i

MsgBox($MB SYSTEMMODAL Default "Number of characters returned: " & $aResult[0])


https://www.autoitscript.com/autoit3/docs/functions/DllCall.htm 3/4
17/7/2020 Function DllCall
MsgBox($MB_SYSTEMMODAL, Default, Number of characters returned: & $aResult[0])
MsgBox($MB_SYSTEMMODAL, Default, "Text (returned in parameter 2): '" & $aResult[2] & "'")

WinClose($hWnd)

Example 3

#include <MsgBoxConstants.au3>

; Show the Windows PickIconDlg.


Local $sFileName = @SystemDir & '\shell32.dll'

; Create a structure to store the icon index


Local $tIconIndex = DllStructCreate("int")
Local $tString = DllStructCreate("wchar[260]")
Local $iStructsize = DllStructGetSize($tString) / 2
DllStructSetData($tString, 1, $sFileName)

; Run the PickIconDlg - '62' is the ordinal value for this function
DllCall("shell32.dll", "none", 62, _
"hwnd", 0, _
"struct*", $tString, _
"int", $iStructsize, _
"struct*", $tIconIndex)

$sFileName = DllStructGetData($tString, 1)
Local $iIconIndex = DllStructGetData($tIconIndex, 1)

; Show the new filename and icon index


MsgBox($MB_SYSTEMMODAL, "Info", "Last selected file: " & $sFileName & @CRLF & "Icon-Index:

https://www.autoitscript.com/autoit3/docs/functions/DllCall.htm 4/4

You might also like