DLL内の関数を動的に実行します。
DllCall ( "dll", "return type", "function" [, type1, param1 [, type n, param n]] )
パラメータ
| dll | 使用するDLLファイルの名前。例:"user32.dll"。DllOpenで取得したハンドルも使用可能(注意を参照)。 |
| return type | 関数の返し値の型(下記参照)。 |
| function | 実行するDLL内の関数の名前。例:"MessageBox"、序数の"62"。 |
| type1 | [オプション] パラメータの型(注意を参照)。 |
| param1 | [オプション] 実際のパラメータ(注意を参照)。 |
| type n | [オプション] n番目のパラメータの型(注意を参照)。 |
| param n | [オプション] n番目の実際のパラメータ(注意を参照)。 |
有効な型は下表のとおりです。
| 型 | 詳細 |
| none | 値なし(返し値の型としてのみ有効。C言語のvoidと等価。) |
| 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 | ウィンドウハンドル(ポインタ) |
| HANDLE | ハンドル(ポインタ) |
| 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文字未満) |
| * | 他の型の末尾に*を付けることで参照渡しが可能です。例えば"int*"とすると"int"型へのポインタが渡されます。 |
| WindowsAPIの型 | 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 |
返し値
| 成功 | @error = 0 | |
| 失敗 | @errorを設定します。 | |
| @error: | DLLファイルが使用できない場合 @error = 1 | |
| "返し値の型"が不明な場合 @error = 2 | ||
| "関数"がDLLファイル内に見つからない場合 @error = 3 |
注意
DLLファイル名が与えられるとDLLは自動でロードされ、実行が終わると閉じられます。DLLのロード、終了を手動で制御したい場合はDllOpen、DllCloseを使用してこの関数にファイル名の代わりにハンドルを渡してください。
関連
DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllOpen, DllClose, DllStructCreate, DllStructGetPtr
例
; *******************************************************
; 例 1 - MessageBox API を直接呼び出す
; *******************************************************
$result = DllCall("user32.dll", "int", "MessageBox", "hwnd", 0, "str", "Some text", "str", "Some title", "int", 0)
; *******************************************************
; 例 2 - 渡したパラメータを変更する関数を呼び出す
; *******************************************************
$hwnd = WinGetHandle("[CLASS:Notepad]")
$result = DllCall("user32.dll", "int", "GetWindowText", "hwnd", $hwnd, "str", "", "int", 32768)
msgbox(0, "", $result[0]) ; 文字数が返される
msgbox(0, "", $result[2]) ; パラメータ2内の返されたテキスト
; *******************************************************
; 例 3 - Windows PickIconDlgを表示
; *******************************************************
$sFileName = @SystemDir & '\shell32.dll'
$sFileName = @SystemDir & '\shell32.dll'
; アイコンインデックス用の構造体を作成
$stIcon = DllStructCreate("int")
$stString = DLLStructCreate("wchar[260]")
$structsize = DllStructGetSize($stString)/2
DllStructSetData($stString, 1, $sFileName)
; PickIconDlgを実行 - '62' はこの関数の序数
DllCall("shell32.dll", "none", 62, "hwnd", 0, "ptr", DllStructGetPtr($stString), "int", $structsize, "ptr", DllStructGetPtr($stIcon))
$sFileName = DllStructGetData($stString, 1)
$nIconIndex = DllStructGetData($stIcon, 1)
; 新しいファイル名とアイコンインデックスを表示
Msgbox(0, "Info", "Last selected file: " & $sFileName & @LF & "Icon-Index: " & $nIconIndex)