调用指定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 *) |
相关
无
示例
; 示例 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中返回的文本(即窗口标题)