函数说明

DllCall

调用指定DLL(动态链接库)文件内部的函数。

DllCall ( "dll", "返回值类型", "函数名" [, "类型1", 参数1 [, "类型 n", 参数 n]] )

 

参数

dll 要使用的 DLL 文件名,例如 "user32.dll"。也可使用由 DllOpen 获得的句柄(请查看下面的注意部分)。
返回值类型 函数的返回值类型(请查看下面的注意部分)。
函数名 要调用的函数名,例如 "MessageBox"
类型 [可选参数] 参数的数据类型(请查看下面的注意部分).
参数 [可选参数] 实参(请查看下面的注意部分)。

 

返回值

请查看下面的注意部分。

 

注意

若给定的是 DLL 文件名则在调用函数时该 DLL 文件将被自动加载并在结束调用后被关闭。若需自己控制 DLL 的加载及卸载,请使用 DllOpen 和 DllClose 函数(执行相应操作)并在调用本函数时使用句柄而不是文件名。

您可以按需传递不限数量的“类型”和“参数”。请参考下面的示例。

合法的数据类型包括:

类型 说明
none 无对应值(仅用作无返回值函数的返回类型,这点跟C语言类似)
short 16 位整型
int 32 位整型
long 32 位整型
short_ptr 指向 16 位整型的指针
int_ptr 指向 32 位整型的指针
long_ptr 指向 32 位整型的指针
str 字符串
wstr 宽字符串(可在调用函数期间转换为 ANSI 字符串或由 ANSI 字符串转换为宽字符串)
hwnd 窗口句柄
ptr 通用指针(void *)

若调用函数失败则 @error 将被设为 1,否则将返回一个含有函数返回值及参数副本(包括函数已修改的参数)的数组。
$return[0] = 函数的返回值
$return[1] = 参数1
$return[2] = 参数2
...
$return[n] = 参数n

 

相关

 

示例


; 示例 1 - 直接调用 API 函数 MessageBox
$result = DllCall("user32.dll", "int", "MessageBox", "hwnd", 0, "str", "这是对话框的文本", "str", "这是对话框的标题", "int", 0)

; 示例 2 - 传递变量以调用一个函数
$hwnd = WinGetHandle("无标题 - 记事本")
$result = DllCall("user32.dll", "int", "GetWindowText", "hwnd", $hwnd, "str", "", "int", 32768)
msgbox(0, "", $result[0])   ; 返回记事本窗口标题的字符数
msgbox(0, "", $result[2])   ; 参数2中返回的文本(即窗口标题)