DllCall
Вызывает функцию из DLL.
Параметры
dll |
Имя файла DLL, например используйте "user32.dll". Также можно использовать указатель полученный от DllOpen() (смотрите примечания). |
return type |
Тип возвращаемого значения функции (смотрите ниже). |
function |
Имя функции вызываемой из DLL, например "MessageBox" или её порядковый номер, например 62. |
type1 |
[необязательный] Тип параметра (смотрите примечания). |
param1 |
[необязательный] Значение параметра (смотрите примечания). |
type n |
[необязательный] Тип n-ого параметра (смотрите примечания). |
param n |
[необязательный] Значение n-ого параметра (смотрите примечания). |
Допустимые типы:
Тип |
Описание |
none |
нет значения (только для возвращения типа параметра - эквивалентно void в C) |
BYTE |
беззнаковое 8 битное целое |
BOOLEAN |
беззнаковое 8 битное целое |
short |
16 битное целое |
USHORT |
беззнаковое 16 битное целое |
WORD |
беззнаковое 16 битное целое |
int |
32 битное целое |
long |
32 битное целое |
BOOL |
32 битное целое |
UINT |
беззнаковое 32 битное целое |
ULONG |
беззнаковое 32 битное целое |
DWORD |
беззнаковое 32 битное целое |
INT64 |
64 битное целое |
UINT64 |
беззнаковое 64 битное целое |
ptr |
общий указатель (void *) |
HWND |
дескриптор окна (pointer) |
HANDLE |
дескриптор (pointer) |
float |
число одинарной точности с плавающей точкой |
double |
число двойной точности с плавающей точкой |
INT_PTR, LONG_PTR, LRESULT, LPARAM |
большое целое число, достаточное для хранения указателя при запуске x86 или x64 версии AutoIt. |
UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM |
беззнаковое большое целое число, достаточное для хранения указателя при запуске x86 или x64 версии AutoIt. |
str |
ANSI строка (минимум выделяется 65536 символа). |
wstr |
UNICODE широкий символ строки (минимум выделяется 65536 символа). |
struct |
Структура созданная функцией DllStructCreate() |
* |
Добавьте * в конце другого типа, чтобы передать его ссылкой. Например "int*" передает указатель на тип "int". |
Преобразование типов "Windows API" в тип AutoIt:
Типы в WINDOWS API |
Типы в AutoIt |
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 |
Для использования вложенных структур внутри структуры необходимо заново определить вложенную структуру. Например, структура, содержащая две POINT структуры ("long;long") должна быть объявлена как "long;long;long;long". Первые два long значения соответствуют первой POINT структуре, а вторые два значения соответствуют второй POINT структуре.
Подробности типов "Windows API" смотрите MSDN.
Возвращаемое значение
Успех: |
@error = 0. |
Ошибка: |
Устанавливает @error |
|
@error: |
1 - невозможно использовать файл DLL, |
|
2 неизвестный возвращаемый тип (return type). |
|
3 функция не найдена в файле DLL. |
|
4 неверное количество параметров. |
|
5 неверный параметр. |
Смотрите примечания.
Примечания
Если используется имя/путь dll, то DLL автоматически загружается и выгружается в конце вызова. Если вы хотите вручную контролировать загрузку и выгрузку DLL, тогда используйте функции DllOpen и DllClose и возвращаемый дескриптор вместо имя/путь dll в этой функции.
По умолчанию, AutoIt использует метод вызова 'stdcall'. Для использования метода 'cdecl' вставьте ':cdecl' после возвращаемого типа.
DllCall("SQLite.dll", "int:cdecl", "sqlite3_open", "str", $sDatabase_Filename , "long*", 0)
По умолчанию, AutoIt пытается использовать ANSI версию имени функции, т. е. MessageBoxA, когда в имени указана функция MessageBox. Для вызова Unicode версии используйте MessageBoxW.
Если вызов функции вызвал сбой, то @error устанавливается в 1. Иначе возвращается массив, который содержит возвращаемое функцией значение и копирует все параметры (включая параметры, которые функция может изменить при передаче ссылок).
$return[0] = возвращаемое значение функции
$return[1] = параметр_1
$return[2] = параметр_2
...
$return[n] = параметр_n
См. также
DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllOpen, DllClose, DllStructCreate, DllStructGetPtr
Пример
; Пример 1 - вызов непосредственно MessageBox API
$result = DllCall("user32.dll", "int", "MessageBox", "hwnd", 0, "str", "Некоторый текст", "str", "Такой вот заголовок", "int", 0)
; Пример 2 - вызов функции, которая запрашивает параметры (запустите блокнот)
$hwnd = WinGetHandle("[CLASS:Notepad]")
$result = DllCall("user32.dll", "int", "GetWindowText", "hwnd", $hwnd, "str", "", "int", 32768)
MsgBox(4096, "", _
$result[0] & @LF & _ ; количество возвращаемых символов
$result[2]) ; текст заголовка возвращаемый в параметре 2
; Пример 3 - Отображает окно выбора иконок PickIconDlg
$sFileName = @SystemDir & '\shell32.dll'
; Создаёт структуру для хранения индекса иконки
$stIcon = DllStructCreate("int")
$stString = DllStructCreate("wchar[260]")
$structsize = DllStructGetSize($stString) / 2
DllStructSetData($stString, 1, $sFileName)
; Вызывает функцию PickIconDlg из shell32.dll с порядковым номером 62 для этой функции
$aRes = DllCall("shell32.dll", "int", 62, "hwnd", 0, "ptr", DllStructGetPtr($stString), "int", $structsize, "ptr", DllStructGetPtr($stIcon))
If @error Or Not $aRes[0] Then Exit ; Выход в случае нажатия кнопки "Отмена"
$sFileName = DllStructGetData($stString, 1)
$nIconIndex = DllStructGetData($stIcon, 1)
; Отображает выбранные имя файла и номер иконки
MsgBox(4096, "Информация", "Последний выбранный файл: " & $sFileName & @LF & "Индекс иконки: " & $nIconIndex)
Источник: http://dayzev.ucoz.ru/
|