Function Reference

DllCall

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の型への変換:
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
構造体内のネストされた構造体を使用するにはネスとされた構造体を再定義する必要があります。 例えば2つのPOINT構造体("long;long")を持つ構造体は"long;long;long;long"として宣言する必要があります。 最初の2つのlong値は1つ目のPOINT構造体と対応しており、2つ目の2つの値は2番目のPOINT構造体と対応しています。
その他のWindowsAPIの型についてはMSDNを参照してください。

 

返し値

成功 @error = 0
失敗 @errorを設定します。
@error: DLLファイルが使用できない場合 @error = 1
"返し値の型"が不明な場合 @error = 2
"関数"がDLLファイル内に見つからない場合 @error = 3
注意を参照

 

注意

DLLファイル名が与えられるとDLLは自動でロードされ、実行が終わると閉じられます。DLLのロード、終了を手動で制御したい場合はDllOpen、DllCloseを使用してこの関数にファイル名の代わりにハンドルを渡してください。

デフォルトではAutoItはstdcall規約を使用します。cdecl規約を使用するためには返し値の型の後ろに':cdecl'をつけて下さい。
例:DllCall("SQLite.dll", "int:cdecl", "sqlite3_open", "str", $sDatabase_Filename , "long*", 0).

デフォルトではAutoItはANSI版の関数名の使用を試みます。例えば関数名としてMessageBoxを指定された場合MessageBoxAを実行しようとします。UNICODE版を使用するにはMessageBoxWを呼んでください。

関数呼び出しに失敗した場合@errorが1に設定されます。それ以外の場合は関数の返し値と全てのパラメータ(関数が変更したパラメータを含む)のコピーが格納された配列が返されます。
$return[0] = 関数の返し値
$return[1] = パラメータ1
$return[2] = パラメータ1
...
$return[n] = パラメータn

 

関連

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)